簡體   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