繁体   English   中英

Xpath不适用于Selenium

[英]Xpath does not work with Selenium

我正在尝试为旧系统构建测试。 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));

但是硒没有找到这种元素。

如果改为

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 Driver。

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

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

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

我不确定为什么这不起作用,这在技术上不是一个答案,但你可以准确地复制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']

我们可以使用以下css

1.CSS =输入[值= '22' ]

2.css =输入[值= '1']

3.css =输入[值= '3']

4.css =输入[值= '99' ]

检查单选按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM