[英]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.