当使用隐式等待时,正如这里所建议的那样,我仍然有时想要断言元素的直接不可见性或不存在.
换句话说,我知道应该隐藏一些元素,并且希望我的测试能够快速地进行断言,而不需要花费几秒钟因为(否则有用)隐式等待.
我试过的一件事就是像这样的辅助方法:
// NB: doesn't seem to do what I want
private boolean isElementHiddenNow(String id) {
WebDriverWait zeroWait = new WebDriverWait(driver, 0);
ExpectedCondition<Boolean> c = invisibilityOfElementLocated(By.id(id));
try {
zeroWait.until(c);
return true;
} catch (TimeoutException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但是在上面的代码中,调用until()
仅在隐式等待时间过去后才返回,即它不能完成我想要的操作.
到目前为止,这是我发现的唯一方法:
@Test
public void checkThatSomethingIsNotVisible() {
turnOffImplicitWaits();
// ... the actual test
turnOnImplicitWaits();
}
Run Code Online (Sandbox Code Playgroud)
...例如turnOffImplicitWaits()
,Selenium超类中的助手:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
} …
Run Code Online (Sandbox Code Playgroud) 点击带有FirefoxDriver的Selenium 2.0b3 Java API的按钮时出现问题.单击该按钮会将表单发送到Web服务器,然后由于表单提交,浏览器将转到新页面.
当使用element.click()单击元素时,selenium正在等待浏览器完成其操作.浏览器等待页面加载完成.但是,由于某些广告请求,有时页面加载会花费大量时间.
如何解决element.click()和页面加载之间的同步问题?
编辑:
正如WebElement javadoc中所解释的那样:
单击此元素.如果这导致加载新页面,则此方法将阻止,直到页面加载为止.
谢谢
public static void main(String[] args){
System.setProperty("webdriver.chrome.driver","E:/softwares/chromedriver_win32/chromedriver.exe");
WebDriver gmail= new ChromeDriver();
gmail.get("https://www.gmail.co.in");
gmail.findElement(By.id("Email")).sendKeys("abcd");
gmail.findElement(By.id("next")).click();
gmail.findElement(By.id("Passwd")).sendKeys("xyz");
Run Code Online (Sandbox Code Playgroud)