以下是我在此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秒
答案 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")));