当前位置: 首页 > 知识库问答 >
问题:

org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互

麻书
2023-03-14

我正在尝试在下面执行硒Web驱动程序脚本,但是我正在获得组织.openqa.硒.元素不可见异常:元素当前不可见,因此可能不会多次与错误进行交互(不是所有时间)。有时在第一次迭代的循环中,有时在2次迭代中,有时没有启动循环。它正确打印所有可用的项目计数,但乳清试图点击项目,它显示元素目前不可见...

public void pickitems() throws Exception  
        {
        Webdriver driver = new firefoxdriver();
        driver.get("http://www.bigbasket.com");
        driver.manage().window().maximize();
            //Selecting Location
        List<WebElement> list = driver.findElement(By.id("ftv-city-popup")).findElements(By.tagName("button"));
        int location = r.nextInt(list.size());
        list.get(location).click();
            //Selection random Category from left panel through list 
        Thread.sleep(30000);
        List<WebElement> xyz = driver.findElement(By.id("uiv2-main-menu")).findElements(By.className("top-category"));
        System.out.println(xyz.size());
        Random r = new Random();
        int category = r.nextInt(xyz.size());
        xyz.get(category).click();


        for (int i = 0; i < 3; i++) {
            Thread.sleep(30000);
            List<WebElement> availableItems = driver.findElements(By.cssSelector("a.uiv2-add-button.a2c"));
            System.out.println(availableItems.size());
            if (availableItems.size() > 0)
            {
                int selectItem = r.nextInt(availableItems.size());
                availableItems.get(selectItem).click();

            } 
            else
            {
                Thread.sleep(30000);
                List<WebElement> availableItems2 = driver.findElements(By.cssSelector("a.uiv2-add-button.a2c"));
                if (availableItems2.size() == 0) {
                    System.out.println("No more items are available. Sorry for the inconvenience");
                }
                else {
                    Assert.fail("Unable to select items. May be page loading issue");
                }


            }

        }

  }

}

共有3个答案

沈宏朗
2023-03-14

对于某些浏览器,一旦执行鼠标悬停操作,菜单列表就会在Selenium识别下一个子菜单项之前迅速消失。在这种情况下,最好使用主菜单上的<code>perform()

这里

WebElement xWL = driver.findElement(By.xpath("x path text"));

Actions xAct = new Actions(driver);

而不是这个:

xAct.moveToElement(xWL).build().perform();

下面的代码将解决“元素不可见”问题

xAct.moveToElement(xWL);
xAct.click();
xAct.perform();
凌和悦
2023-03-14

不知道你的要求是什么。但是,有几件事要记住。

  1. Selenium可能会找到符合相同标准的元素但它们是隐藏的
  2. 即使元素没有隐藏,它也可能没有处于接受任何交互的准备状态。

如果您确定元素没有隐藏,那么您可以使用以下等待元素可见

 new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible("your selector"); 
姚雅珺
2023-03-14

最后,这为我工作。元素当前不可见,因此可能无法与之交互。

起初,测试只有5次中的2次成功。有时不确定它是如何工作的,有时不确定。

通过减少 IE 中的安全设置来工作。启用所有活动 X 控件。同时启用脚本和内联框架。其中一些会警告将计算机置于危险之中,但这是我唯一的解决方案。通过使用状态引入显式等待元素已定位,而不是可见性在页面加载需要时间的每个点进行定位。

    WebDriverWait wait = new WebDriverWait(driver,30);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='campaignListTable']")));   /*examining the xpath for a search     
    box*/
    driver.findElement(By.xpath("//*[@id='campaignListTable']")).sendKeys("TEXT");   /*enter text in search 
    box*/
 类似资料: