【问题标题】:Xpath does not work with SeleniumXpath 不适用于 Selenium
【发布时间】:2013-12-19 18:15:12
【问题描述】:

我正在尝试为旧系统构建测试。 HTML 格式不正确。我需要识别并单击一个单选按钮。

html 看起来像这样:

...
<td class="tablerow" colspan="3">
   <INPUT type=radio name="ticket" value="22" >ramdom1
   <INPUT type=radio name="ticket" value="1" >ramdom2
   <INPUT type=radio name="ticket" value="3" >ramdom3
   <INPUT type=radio name="ticket" value="99" >ramdom4
</td>
...

我尝试使用 xpath 选择输入,如下所示:

String xpath = "//input[contains(@name, 'ticket') and contains(@value, '3')]";
WebElement rb = driver.findElement(By.xpath(xpath));

但是 selenium 没有找到该元素。

如果改成

String xpath = "//input[contains(@name, 'ticket')]";
List<WebElement> rbs = driver.findElements(By.xpath(xpath));

或

String xpath = "//input[contains(@value, '3')]";
List<WebElement> rbs = driver.findElements(By.xpath(xpath));

它有效,selenium 返回一个元素列表,包括我需要的元素。仅当我尝试在同一个 xpath 中同时使用这两个条件时才会出现此问题。

当然,我可以遍历列表并测试每个值,但我想了解我是否做错了什么。由于 IE 没有原生 xpath 支持,我认为这可能是 selenium 实现问题。

我正在使用 Selenium WebDriver (2.37.1) 和 IE 驱动程序。

【问题讨论】:

    标签: java xpath selenium selenium-webdriver


    【解决方案1】:

    不确定这是否是 Selenium 实现问题,但这应该可行:

    "//input[contains(@name, 'ticket')][contains(@value, '3')]"
    

    and的用法基本相同,所以这里的结果应该是正确的。

    【讨论】:

      【解决方案2】:

      我不确定为什么这不起作用,这在技术上不是一个答案,但您可以精确复制 Selenium 所做的事情,以确保它不是 Selenium 或其任何工具有问题。

      Selenium 使用一个名为“Wicked Good XPath”的库来实现基于 Javascript 的 XPath 引擎,因为 IE 没有“本机”引擎。

      因此,要重现该场景,请复制您的页面并将Wicked Good XPath 添加到脚本标题中。该网站首页上的文档非常简单,也很容易理解。

      在 IE 中加载后,打开开发者工具并进入控制台。 Wicked Good XPath 需要这样“初始化”,因此您需要在控制台中调用wgxpath.install()。

      完成后,您现在可以访问 Selenium 将使用的同一个库。现在,您可以在 IE 的开发者控制台中调用一个函数来使用 XPath 访问 DOM:

      document.evaluate("//input[contains(@name, 'ticket') and contains(@value, '3')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
      

      将返回您需要的确切元素,至少对我而言。

      现在,诚然,您根本不需要 XPath,您可以使用 CSS 选择器:

      input[name~='ticket'][value='3']
      

      【讨论】:

      • 或者,在 XPath 中,//input[@name='ticket' and @value='3'],对于给定的 HTML,所有这些 CONTAINS(...) 都是不必要的。
      • @RossPatterson 感谢您的建议,但没有奏效。同样的错误。
      • @Arran wgxpath 返回“未定义”。奇怪的是,即使使用 blalasaadri 建议的 xpath(与 selenium webdriver 一起使用),它也不起作用。 CSS 选择器也有效。
      【解决方案3】:

      我们可以使用下面的css

      1.css=input[value='22']

      2.css=input[value='1']

      3.css=input[value='3']

      4.css=input[value='99']

      用于检查单选按钮。

      【讨论】:

        猜你喜欢
        • 2017-08-13
        • 2021-01-01
        • 2013-05-14
        • 2021-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        相关资源
        最近更新 更多