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

标签 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')]]")

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

最佳答案

在 xpath 下面使用

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

关于Selenium,无法通过在子节点后面包含文本来找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066851/

相关文章:

python - 在 Python 中最大化 WebDriver (Selenium 2)

Java Selenium FirefoxDriver 忽略给定的代理设置

eclipse - 如何将selenium javadoc绑定(bind)到eclipse

python - WebDriver - Python - 下拉菜单中有多少个元素

c# - 错误: Caught exception [ERROR: Unsupported command [addSelection |]

Python Selenium 检查复选框输入中的全选

javascript - 解决 selenium2 打印弹出窗口

c# - Selenium WebDriver : unable to locate element (C#)

python - extract href scrapy - 爬行但不提取

c# - Webdriver 无法单击带有证书错误页面的弹出窗口