簡體   English   中英

Selenium Webdriver-從Li / A查找動態ID

[英]Selenium Webdriver - Find dynamic id from li/a

我正在嘗試從li選擇一個值(Bellevue)(看起來像一個下拉列表,但不是)。問題是每次頁面加載時其id改變。 這是屏幕截圖:

在此處輸入圖片說明

這次ID為: ui-id-23 ,但是下次將更改數字23,因此它將無法正常工作。如果我展開<a id="ui-id-23..." ,名稱為“ Bellevue”,但每個字符都用<strong> </ strong>標記包圍。

我找不到它的類名,因為li中的兩個值都具有相同的類ui-menu-item

我在xpath之后嘗試: "//a[contains(text(),'Bellevue')]"但出現錯誤: Unable to locate element...

您是否知道任何解決方案?我正在Java和TestNG中使用Selenium Webdriver。 謝謝!

更新

所以我設法使用以下方法找到該元素:

WebElement value = driver.findElements(By.cssSelector("a[id^='ui-id-']")).get(3); value.click();

但是在我的應用程序中,我正在使用頁面對象,並且使用@FindBy(how.HOW .....)來照顧元素。您知道如何將.get(3)與@FindBy一起使用嗎?

看起來好像使用jQuery uniquId()方法填充id,所以它將始終以ui-id-開頭。 您可以使用jQuery選擇器來選擇ID以ui-id-開頭的元素

WebElement webElement = (WebElement) ((JavascriptExecutor) webDriver).executeScript("return $( 'input[id^="ui-id-"]').get(0);");

我會嘗試使用xpath避免使用id。 例如, //a[@class=''ui-corner-all ui-state-focus ][2]

您要在ID上使用CSS選擇器:

a[id^='ui-id-']

這就是說“查找ID以ui-id-開頭的所有a元素”

如果要查找第二項,請執行以下操作:

driver.findElements(By.cssSelector("a[id^='ui-id-']"))[1]

[1]將選擇頁面上的第二項。

首先獲取在其中定義了id屬性的標簽名稱。

 WebElement ele = driver.findElement(By.tagName(tagName));
 String strId = ele.getAttribute("id").startsWith("ui-id-");

 driver.findElement(By.id(strId)).click();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM