首页 文章

如何通过XPath在<tr>中找到<span>元素

提问于
浏览
0

我的HTML代码如下所示:

<html>
    <body>
        <div>
        </div>
        <div>
            <table>
                <tbody id=a>
                    <tr>
                        <td>
                            <div>
                                <span>
                                   some Text
                                </span>
                            </div>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <div>
                                <span>
                                   some Text2
                                </span>
                            </div>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <div>
                                <span>
                                   some Text3
                                </span>
                            </div>
                        </td>
                    </tr>
              </tbody>
       </table>
   </div>
</body>

我试图通过文本选择每个span元素 . 我可以通过id选择tbody . 我试过这个:

tbody.FindElement(By.XPath(String.Format(".//span[contains(text(), {0}))]", &var)));  
(var = somex0020Text)

但这总是返回我表中的第一个 <span> 元素 .

我也尝试过:

tbody.FindElements(By.XPath(String.Format(".//span[contains(text(), {0}))]", &var)));

它返回了一个包含我表中每个 <span> 元素的列表,我不知道为什么 .

我也不明白为什么

tbody.FindElement(By.XPath(String.Format(".//span[text() =  {0})]", &var)));

当contains方法返回一个只有相同文本的 <span> 元素时,抛出一个Element not found Exception .

4 回答

  • 0

    试试这个Xpath $ x(“// tr // span [contains( . ,'some text')]”)

  • 0

    tbody.FindElement(By.XPath(String.Format(“.// span [contains(text(),{0}))]”,&var))); (var = somex0020Text)但这总是返回表格中的第一个元素 .

    这是Selenium中的预期行为 . 正如我所看到的,有3个元素具有与代码中提到的相同的xpath,在本例中为 Selenium returns the first element .

    tbody.FindElements(By.XPath(String.Format(“.// span [contains(text(),{0}))]”,&var)));它返回了一个包含我表中每个元素的列表,我不知道为什么 .

    这也是一个expected behavior in Selenium . FindElements 将返回具有相同xpath的所有元素 .

    因此,将 var 的值更改为 some Text2some Text3 以找到其他两个元素 .

    以下 xpath 适用于 some Text2

    .//span[contains(text(), 'some Text2'))]
    
  • 2

    我尝试使用xpath作为:

    .//span[contains(text(),'some Text')]
    

    它正在选择所有3个 Span .

    所以对此我已经引用了父元素 .

    第一跨: .//tbody[@id='a']//tr[1]//span[contains(text(),'some Text')]

    第二名: .//tbody[@id='a']//tr[2]//span[contains(text(),'some Text')]

    第3名: .//tbody[@id='a']//tr[3]//span[contains(text(),'some Text')]

    通过这个,我可以单独选择每个span元素 .

  • 0

    您可以使用jQuery获取“Table”中的所有span元素 .

    例:

    var items = $('table div span');
        items.each(function (x) {
            alert(items[x].innerHTML);
        });
    

相关问题