Slenium-Java: Wait.until(ExpectConditions.invisibilityOfElem



ExpectedConditions.invisibilityOfElementLocated throws Timeout Exception并终止程序。

  1. 启动浏览器并导航到登录页面。

  2. 输入用户名,密码,然后单击登录

  3. 由于加载时间不同,我想等到登录按钮不可见

这适用于我使用有效凭据并单击登录的积极情况。 但它总是在负面情况下失败,即当我尝试在登录时使用无效的用户名和密码组合clcik时,它正在等待最长时间,然后失败并出现超时异常。 最后,我尝试使用Try / Catch且经过验证的标题,但真的不明白为什么它不起作用,尽管等待条件是登录页面并且我正在使用不可见的元素......

driver = new FirefoxDriver();
driver.manage().window().maximize();
//driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
driver.get("http://newtours.demoaut.com/");
driver.findElement(By.name("userName")).sendKeys("valid password");
driver.findElement(By.name("password")).sendKeys("invalid password");
driver.findElement(By.name("login")).click();
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.name("login")));
titleActual = driver.getTitle();
if (titleActual.equals(titleExpected)) {
System.out.println("Login successful");
} 
else {
}
driver.close;

预期:输入用户名和密码后,一旦我单击登录 - 它应该从等待中出来并获取驱动程序页面标题 实际:它正在等待错误超时异常给出的最长时间,终止程序执行

原木:

2019年8月21日 下午5:38:37 org.openqa.selenium.remote.ProtocolHandshake 创建会话信息:检测到方言:线程"main"中的 W3C 异常 org.openqa.selenium.TimeoutException: 预期条件失败: 等待元素不再可见: By.name:登录(尝试 60 秒,间隔 500 毫秒( 构建信息: 版本: "3.141.59",修订版:"e82be7d358",时间:"2018-11-14T08:17:03"系统 信息:主机:"笔记本电脑-2PL6I9SD",IP:"192.168.43.30",os.name:"Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.1' 驱动程序信息: org.openqa.selenium.firefox.Firefox Driver Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 67.0.3, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20190618025334, moz:geckodriverVersion: 0.24.0, moz:headless: false, moz:processID: 15188, moz:profile: C:\Users\SWATHI\AppData\Loc..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platform版本: 10.0, 可旋转: 假, 设置窗口矩形: 真, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000,脚本:30000},未处理提示行为:关闭并通知} 会话 ID: e2401e63-ffda-45cd-a73f-ea418e38236d at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95( 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272( 在basic_tests。LoginFlightTest.main(LoginFlightTest.java:33(

此方法将失败,因为有时网络延迟可能很长,登录按钮会消失。但是,下一页尚未加载。因此,阳性病例也可能失败。您应该尝试等待登录后加载的下一页上的某些组件。

在负面测试用例中,您可以等待显示相应的错误消息。

我已经验证了您的解决方案,这可能是您的n/w或网站无法快速响应的问题。 您的脚本工作正常,没有任何问题。 请使用以下脚本再试一次,不要忘记更新 Chrome 驱动程序路径。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Sampletest {
public static void main(String[] args) {

System.setProperty("webdriver.chrome.driver", "C:\Users\win32\76.0.3809.68\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
//driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
driver.get("http://newtours.demoaut.com/");
driver.findElement(By.name("userName")).sendKeys("myworld");
driver.findElement(By.name("password")).sendKeys("myworld");
driver.findElement(By.name("login")).click();
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.name("login")));
String titleActual = driver.getTitle();
if (titleActual.equals("titleExpected")) {
System.out.println("Login successful");
} else {
}
driver.close();
}
}

最新更新