我在使用Selenium和Java单击元素时遇到问题。这是表格的样子。
<tr class="even">
<td class="linked-item">
<a title="Imported Gatekeeper" href="/rss-servlet/remotesupport/viewgatekeeper.action?siteId=20">SJHS_OK - Technology Center - (CWx Network Connectivity)</a>
</td>
</tr>
<tr class="odd">
<td class="linked-item">
<a title="Imported Gatekeeper" href="/rss-servlet/remotesupport/viewgatekeeper.action?siteId=26">SJHS_OK - Technology Center - (CWx Network Connectivity) - Backup</a>
</td>
</tr>
我正在尝试选择第一个元素SJHS_OK - 技术中心 - (CWx网络连接),这是另一个页面的链接。这只是代码的一部分,远不止这些。
当我尝试使用contains时出现问题,我的xpath看起来像这样:
//*[@title='Imported Gatekeeper'][contains(.,'SJHS_OK - Technology Center - (CWx Network Connectivity)')][not(contains(.,'Backup'))]
有时当我把它放入火道时,它会起作用并找到元素,有时则不然。不知道为什么它总是不起作用。
我的Java代码如下所示:
String gatekeeper = "SJHS_OK - Technology Center - (CWx Network Connectivity)"
DRIVER.findElement(By.xpath("//*[@title='Imported Gatekeeper']"+gatekeeper+"[not(contains(.,'Backup'))]")).click();
我这样做是为了让我可以轻松更改网守变量并选择不同的网守。看门人将从excel表中拉出来。
任何有关错误的帮助都会受到赞赏,或者我可以通过另一种方式找到可以通过变量更改的元素。
答案 0 :(得分:0)
如果xpath有时会发现,有时却找不到,那么问题可能就是缺少等待。如果元素在您尝试单击时不存在或不可见,则代码将引发错误。试试吧:
WebElement yourElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@title='Imported Gatekeeper'][contains(.,'SJHS_OK - Technology Center - (CWx Network Connectivity)')][not(contains(.,'Backup'))]")));
<强> @Edit 强>
由于等待不起作用且代码仍然有时有效,有时没有,当重新定义te页面时,没有足够数量的空格来填充文本。试试这个xpath选择器:
//a[@title='Imported Gatekeeper'][text()[contains(., 'SJHS_OK')]][contains(., 'Technology Center')][contains(., 'CWx')][contains(., 'Network')][contains(., 'Connectivity')][not(contains(.,'Backup'))]
此外,在测试有效时,请在Google Chrome控制台中尝试所有这些选择器,而不是在Chrome控制台中。您可以使用$x("your xpath here")
答案 1 :(得分:0)
您不必使用xpath。如果您使用的是Java8,请尝试使用:
driver.findElements(By.tagName("a")).stream()
.filter(td -> !td.getText().contains("Backup"))
.findFirst().get().click();
如果元素可以找到任何一种方式,那么下面可能有一些东西,也许元素没有被完全加载? 发生错误时,您能提供堆栈跟踪吗?
答案 2 :(得分:0)
我发现当我复制SJHS_OK - 技术中心 - (CWx网络连接直接来自Xpath,那么它会起作用,但是如果我自己输入它,即使它在比较时是准确的,它也行不通。我的结论是因为它与空间有关。如果我在没有空格的情况下将其剪下来,错误就会消失。