Selenium,无法通过在子节点后面包含文本来查找元素

时间:2013-02-25 12:20:18

标签: selenium selenium-webdriver

一点背景知识: HTML看起来像这样:

    <table>
        <thead>
            <tr>
                <th>Head1</th>
                <th>Head2</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>
                    <span>
                       <span class="icon">S</span>
                        "Auto"
                    </span>
                </td>
                <td>
                    <span>
                        Cost, Time
                    </span>
                </td>
            </tr>
        </tbody>
    </table>

代码的简单版本如下所示:(在pry中运行)

[69] pry> e = driver.find_element(:xpath, "//table/tbody/tr/td/span")
=> #<Selenium::WebDriver::Element:0x7ba9a4d694458ec id=":wdc:1361791490676">

[70] pry> e.text
=> "SAutomotive"

[71] pry> e = driver.find_element(:xpath, "//table/tbody/tr/td/span[contains(text(),'Auto')]")

Selenium::WebDriver::Error::NoSuchElementError: The element could not be found
from /Users/ben/.rvm/gems/ruby-1.9.3-p194/gems/selenium-webdriver-2.29.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'

我无权更改HTML代码 虽然这个表中只有一行,但是有可能添加更多行,我无法预测行的位置,这就是我试图按名称查找它的原因

我的正常代码是:

e = driver.find_element(:xpath, "//table/tbody/tr[td/span[contains(text(),'Auto')]]")

我遇到的问题是我找不到任何方法通过第一个表格单元格的文本中给出的名称来获取表格中的行。

1 个答案:

答案 0 :(得分:2)

在xpath下面使用

"//table/tbody/tr/td/span[contains(.,'Auto')]"