尝试从 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 之一:

使用 cssSelectorselectByVisibleText():

new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select#searchDropdownBox")))).selectByVisibleText("Books");

使用 xpathselectByValue():

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 你不是在尝试按照代码试验中的 xpath driver.findElement(By.xpath("//select[@id='searchDropdownBox']")) 与相同的 &lt;select&gt; 标记进行交互吗?

以上是关于尝试从 Selenium Web 自动化的下拉列表中选择一个选项 -error-“ElementNotInteractableException:无法滚动到视图中”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium WebDriver C# 从下拉列表中选择一个选项?

如何使用 Selenium WebDriver C# 从下拉列表中选择一个选项?

python+selenium2自动化---使用Select类实现下拉列表的定位

如何在 Selenium 的下拉列表中选择项目

web自动化测试—selenium游览器下拉框操作

selenium自动化测试之单选下拉列表alert弹窗处理页面刷新