尝试从 Selenium Web 自动化的下拉列表中选择一个选项 -error-“ElementNotInteractableException:无法滚动到视图中”
Posted
技术标签:
【中文标题】尝试从 Selenium Web 自动化的下拉列表中选择一个选项 -error-“ElementNotInteractableException:无法滚动到视图中”【英文标题】:Trying to select an option from the dropdown in Selenium web automation -error- "ElementNotInteractableException: could not be scrolled into view" 【发布时间】:2020-12-30 09:51:13 【问题描述】:package com.web.automation;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.javascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class dropDown
WebDriver driver;
@BeforeMethod
public void site() throws InterruptedException
System.setProperty("webdriver.gecko.driver", "geckodriver");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://www.amazon.com/");
@AfterMethod
public void close()
driver.close();
@Test
public void register() throws InterruptedException
Select s = new Select(driver.findElement(By.xpath("//select[@id='searchDropdownBox']")));
s.selectByValue("search-alias=alexa-skills");
代码说明:
我正在尝试自动化 www.amazon.com 网页。主页本身有一个名为“全部”的下拉列表。如果我们单击全部下拉菜单,将会有不同的选项可供选择。使用 Selenium 自动化,我尝试单击下拉菜单并选择其中一个选项。
Select s = new Select(driver.findElement(By.xpath("//select[@id='searchDropdownBox']")));
s.selectByValue("search-alias=alexa-skills");
错误:
FAILED: register
org.openqa.selenium.ElementNotInteractableException: Element <option> could not be scrolled into view
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
【问题讨论】:
以上文字为元素。由于文本限制,我无法添加整个 html 元素 尝试使用 ExpectedConditions.presenceOfElement 添加显式等待。 【参考方案1】:要从下拉列表中选择文本为Books
的选项,您需要为elementToBeClickable()
引入WebDriverWait,您可以使用以下Locator Strategies 之一:
使用 cssSelector 和 selectByVisibleText()
:
new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select#searchDropdownBox")))).selectByVisibleText("Books");
使用 xpath 和 selectByValue()
:
new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@id='searchDropdownBox']")))).selectByValue("search-alias=stripbooks-intl-ship");
【讨论】:
太棒了!这对我将来会有帮助。但我想我已经找到了搜索框的元素而不是下拉按钮。因为下拉是 div 元素。 由于我正在学习教程,我相信很快我会找到为 div 标签选择下拉选项的解决方案,因为我提到的上述代码适用于“select”标签。感谢您的回复@DebanjanB。 @KrishnaveniRaju 你不是在尝试按照代码试验中的 xpathdriver.findElement(By.xpath("//select[@id='searchDropdownBox']"))
与相同的 <select>
标记进行交互吗?以上是关于尝试从 Selenium Web 自动化的下拉列表中选择一个选项 -error-“ElementNotInteractableException:无法滚动到视图中”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium WebDriver C# 从下拉列表中选择一个选项?
如何使用 Selenium WebDriver C# 从下拉列表中选择一个选项?