Selenium Webdriver:元素不可见异常

Posted

技术标签:

【中文标题】Selenium Webdriver:元素不可见异常【英文标题】:Selenium Webdriver: Element Not Visible Exception 【发布时间】:2015-05-03 10:56:30 【问题描述】:

这是我在Website 上单击简单登录按钮的代码

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;    
import org.openqa.selenium.WebDriver;    
import org.openqa.selenium.firefox.FirefoxDriver;    

public class Reports 

    public static void main(String[] args) 

        WebDriver driver = new FirefoxDriver();
        driver.get("https://platform.drawbrid.ge");
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        driver.findElement(By.xpath(".//*[@id='_loginButton']")).click();

    

我收到以下错误:

线程“主”org.openqa.selenium.ElementNotVisibleException 中的异常:元素当前不可见,因此可能无法与之交互 命令持续时间或超时:2.05 秒

【问题讨论】:

【参考方案1】:

你可以试试:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("your locator value")));

或者

wait.until(ExpectedConditions.ElementIsVisible(By.xpath("your locator value")));

【讨论】:

欢迎来到 SO 并感谢您的回答 - 请尝试在所提供的答案周围添加更多上下文 - ***.com/help/how-to-answer【参考方案2】:

您在此页面上有两个带有给定 xpath 的按钮,第一个不可见,这就是您收到 ElementNotVisibleException 的原因

<div class="loginPopup">下一个

第二个(你需要的那个)在<div class="page">

因此,将您的 xpath 更改为如下所示,它将解决您的问题:

By.xpath("//div[@class='page']//div[@id='_loginButton']")

【讨论】:

【参考方案3】:

确保remote server 上的窗口足够大,这样元素就不会因为空间限制而隐藏..

这对我有用:(我使用c#

driver.Manage().Window.Size = new System.Drawing.Size(1928, 1060);

【讨论】:

【参考方案4】:
public static void Listget (WebDriver driver) throws Exception 


    Thread.sleep(5000);
    UtilityMethod.getAppLocaters(driver, "closeicon").click();

    Actions action = new Actions(driver);
    WebElement we = driver.findElement(By.xpath("//li[@class='parent dropdown  aligned-left']"));
    Thread.sleep(5000);
    action.moveToElement(we).build().perform();

    List<WebElement>links = driver.findElements(By.xpath("//span[@class='menu-title']"));
    int total_count = links.size();       
    System.out.println("Total size :=" +total_count);           
     for(int i=0;i<total_count;i++)
                     
            WebElement  element = links.get(i);
            String text = element.getAttribute("innerhtml");
            System.out.println("linksnameis:="  +text);

            try
                    File src = new File("D:ReadFile.xlsx");
                    FileInputStream fis = new FileInputStream(src);
                    XSSFWorkbook wb=new XSSFWorkbook(fis);
                    XSSFSheet sh = wb.getSheetAt(0);

                    sh.createRow(i).createCell(1).setCellValue(text);

                    FileOutputStream fos = new FileOutputStream(new File("D:/ReadFile.xlsx"));
                    wb.write(fos);
                    fos.close();
                
                catch(Exception e)
                
                    System.out.println(e.getMessage());
                


        
    

【讨论】:

我收到错误“org.openqa.selenium.ElementNotVisibleException:元素不可见”需要帮助【参考方案5】:

Webdriver 可能会抛出 ElementNotVisible 异常,以防多个元素具有相同的定位器,并且如果 Webdriver 已经对匹配定位器的元素之一进行了操作。

在这种情况下,您可以首先使用获取元素的大小

int var_ele_size= driver.findElements(By.xpath("locator")).size();

然后从列表中取出第一个元素并单击该元素。

driver.findElements(By.xpath("locator")).get(var_ele_size-1).click();

【讨论】:

【参考方案6】:

id="_loginButton" 出现了 3 次。

通过 cssSelector 使用 class="signIn" 下的 id="_loginButton" 来获取页面中的确切按钮。

By.cssSelector("div.signIn div#_loginButton")

【讨论】:

【参考方案7】:

页面上甚至有 3 个带有id="_loginButton" 的元素,只有一个可见 - 位于登录表单内的那个,您可以通过 CSS 选择器获取它 em>:

By.cssSelector("form#_loginForm div#_loginButton")

【讨论】:

以上是关于Selenium Webdriver:元素不可见异常的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 ElementNotInteractableException:元素在 Selenium webdriver 中不可见?

如何避免“元素当前不可见,因此可能无法与” Selenium Webdriver

Selenium C# Webdriver如何检测元素是不是可见

Selenium Webdriver - 点击隐藏元素

Selenium Webdriver Python - 检查元素是不是可见/检测到/存在[重复]

Selenium Webdriver 测试元素可见性的假阴性结果?