Selenium Webdriver:元素不可见的exception

这是我的代码,点击本网站上的简单登录按钮

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”中的exceptionorg.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与命令持续时间或超时交互:2.05秒

你有两个按钮在这个页面上给定xpath,首先是不可见的,这就是你得到ElementNotVisibleException的原因

一个在

第二个(你需要的那个)在

所以改变你的xpath看起来像这样,它将解决你的问题:

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

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

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

有3次出现id="_loginButton"

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

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

如果有多个元素具有相同的定位器,并且Webdriver已经在匹配定位器的元素之一上操作,则Webdriver可能会抛出ElementNotVisibleexception。

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

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

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

 driver.findElements(By.xpath("locator")).get(var_ele_size-1).click(); 
 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(); Listlinks = 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 

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

这对我有用:(我用c#

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