繁体   English   中英

Java和Selenium,使用contains通过xpath单击元素

[英]Java and Selenium, Clicking element by xpath using contains

我在使用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'))]有时,当我将其放入Firepath时,它可以工作并找到该元素,有时却不行。 不知道为什么它并不总是有效。

我的Java代码如下所示: String gatekeeper = "SJHS_OK - Technology Center - (CWx Network Connectivity)" DRIVER.findElement(By.xpath("//*[@title='Imported Gatekeeper']"+gatekeeper+"[not(contains(.,'Backup'))]")).click();

我这样做是为了轻松更改Gatekeeper变量并选择其他Gatekeeper。 网闸将从Excel表格中拉出。

对于这里出现问题的任何帮助,将不胜感激,或者也许我可以通过另一种方式找到可以单击该元素的变量,该元素可以通过变量进行更改。

如果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'))]")));

@编辑

由于等待不起作用,代码静止有时有效,有时不起作用,因此在渲染页面时,没有固定数量的空格可以填充文本。 试试这个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")测试xpath

您不必为此使用xpath。 如果您使用的是Java8,请尝试以下操作:

driver.findElements(By.tagName("a")).stream()
    .filter(td -> !td.getText().contains("Backup"))
    .findFirst().get().click();

如果以任何一种方式都可以找到该元素,则在其下可能存在某些内容,也许该元素没有被完全加载? 发生错误时可以提供stacktrace吗?

我发现,当我直接从Xpath复制SJHS_OK-技术中心-(CWx网络连接)时,它可以工作,但是如果我自己键入它,即使比较时它是准确的,它也不行。我的结论是,它与空格有关。如果我在没有空格的情况下将其删除,错误将会消失。

暂无
暂无

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

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