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
可能会抛出ElementNotVisible
exception。
在这种情况下,您可以先使用获取元素的大小
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);