簡體   English   中英

Selenium Java 未找到下拉菜單元素

[英]Dropdown menu element not found with Selenium Java

每當我使用 Selenium ChromeDriver 在此網站上查找第一個下拉菜單(州/省菜單)時,它總是返回一個未找到元素的錯誤。

我已經嘗試過顯式等待,通過 CSS、XPath、名稱等以及 ChromeDriver 選項找到元素。 我什至嘗試運行 JavaScript 並通過其 XPath 找到元素並更改選擇它,但除非我先檢查頁面,否則它不起作用。

這是 ChromeDriver 還是網站問題? 我可能會求助於 Java 機器人並更多地手動完成。

我的初始化代碼:

WebElement selectElement = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div/div/div[2]/font/table[1]/tbody/tr[1]/td[2]/select"));
Select select = new Select(selectElement);

頁面上存在 iframe,因此您需要先打開 iframe,然后單擊該元素。
此外,在答案中,我使用相對 xpath 來查找元素,而不是絕對 xpath,因為相對 xpath 更加穩定。

你的代碼應該是這樣的:

 // Switch the driver to iframe
 driver.switchTo().frame(driver.findElement(By.id("iFrameResizer0")));

 // Find the element by relative xpath
 WebElement element = driver.findElement(By.xpath("//select[@name='filter_data8']"));
 Select select = new Select(element);
 select.selectByIndex(2);

在檢查元素時,我發現網站上有一個 iframe 並且上面包含了內容。 在這里檢查:

在此處輸入圖像描述

因此,當您嘗試處理 iframe 中存在的元素時,它會返回NoSuchElementException 首先你需要切換到 iframe 然后它才會工作。

更好的方法是使用顯式等待條件切換到它,因為它等待框架加載到頁面上然后切換焦點。 參考這段代碼:

(new WebDriverWait(driver,20)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("iFrameResizer0")));

然后 select 下拉值:

WebElement state = new driver.findElement(By.name("filter_data8"));
new Select(state).selectByVisibleText("state_value");

我建議您使用推薦的定位器選擇 go。 參考這個博客

The Element on which you want perform operation, that is available into an IFrame so:

1) Switch to Iframe first:

driver.switchTo().frame(driver.findElement(By.id("iFrameResizer0")));

2) Then perform the operation to select the value from drop down box:

 WebElement element = driver.findElement(By.xpath("//select[@name='filter_data8']"));
 Select select = new Select(element);
 select.selectByVisibleText("Alaska");

暫無
暫無

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

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