Selenium Webdriver:元素不可见的异常

时间:2015-03-02 22:42:08

标签: java selenium selenium-webdriver automation qa

以下是我在此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();

    }
}

我收到以下错误:

  

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

7 个答案:

答案 0 :(得分:15)

在此页面上有两个带有给定xpath的按钮,首先是不可见的,这就是为什么你会得到ElementNotVisibleException

一个在<div class="loginPopup">

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

之下

因此,将您的xpath更改为这样,它将解决您的问题:

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

答案 1 :(得分:3)

页面上甚至有3个带有{​​{1}}的元素,只有一个可见 - 位于登录表单内的那个元素,您可以通过 CSS选择器获取它

id="_loginButton"

答案 2 :(得分:2)

id="_loginButton"有3次出现。

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

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

答案 3 :(得分:0)

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

在这种情况下,您可以先使用

获取元素的大小
int var_ele_size= driver.findElements(By.xpath("locator")).size();

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

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

答案 4 :(得分:0)

{{1}}

答案 5 :(得分:0)

确保remote server上的窗口足够大,以免因空间限制而隐藏元素。

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

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

答案 6 :(得分:0)

您可以尝试:

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

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