java - Selenium Web Driver 似乎间歇性地跳过 driver.get()

标签 java selenium junit webdriver selenium-webdriver

我有一个用 Java 编写的 Selenium Web 驱动程序测试,目标是 Liferay 站点。

// Login
driver.get(baseUrl + "/");
driver.findElement(By.id("_58_login")).sendKeys(login);
driver.findElement(By.id("_58_password")).sendKeys(password);
driver.findElement(By.xpath("//input[@value='Sign In']")).click();

// Try to navigate to dashboard and expect error
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Liferay")));
driver.get(baseUrl + "/user/tm2/so/dashboard");
driver.findElement(By.xpath("//h3[contains(., 'Not Found')]"));

问题是,测试间歇性地(约 50% 的时间)失败,并出现异常 org.openqa.selenium.NoSuchElementException: Unable tolocate element: {"method":"xpath","selector":"//h3[包含(., '未找到')]"}

在测试期间观察 Web 驱动程序的浏览器行为时,会发现登录例程按预期工作,单击“登录”按钮。但是一旦页面到达登陆页面,它就会挂起 30 秒(我的隐式超时设置),并抛出异常。

我怀疑 driver.get(baseUrl + "/user/tm2/so/dashboard") 调用以某种方式被跳过。您可以看到我设置了一个 WebDriverWait 来尝试阻止 driver.get 导航发生,直到登录例程完成,但这似乎没有帮助。

有什么想法吗?

更新:我发现问题与 Selenium 无关 - 这是应用程序本身的问题,有时导航到 URL 只会刷新当前页面。

最佳答案

没问题,将代码更改为如下所示:

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
           .withTimeout(30, SECONDS)
           .pollingEvery(5, SECONDS)
           .ignoring(NoSuchElementException.class, ElementNotFoundException.class);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Liferay")));
driver.get(baseUrl + "/user/tm2/so/dashboard");
driver.findElement(By.xpath("//h3[contains(., 'Not Found')]"));

关于java - Selenium Web Driver 似乎间歇性地跳过 driver.get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18794144/

相关文章:

java - 使用 Unit 方法捕获多个异常

java - 在 jUnit 中测试有序的 CRUD

java - JUnit 测试中的重写方法

java - MyBatis 多结果集与过程

java - 如何映射一个仅供 HQL 使用的属性(在 Hibernate 中)?

python - 使用类名、css-选择器和 xpath 从网站中查找元素

java - 如何使用 sikuli 和 selenium webdriver java 自动化 flash

selenium - 如何提取 HTML 标签中的文本(在 Selenium IDE 中)?

java - Jackson Mapper 在三星 SM-T580 上抛出 "conflicting setter definitions"

java - Android 客户端 -> SSL -> Java 服务器错误 : no cipher suites in common