Webdriver断言在IE中失败

时间:2014-04-24 12:55:37

标签: java internet-explorer-8 selenium-webdriver internet-explorer-9

我有大约50个自动测试用例,在Chrome和Firefox中都像魅力一样,但是IE不会这样做(需要太糟糕的IE)。

IE在断言时失败(并非所有断言,但绝大多数断言)因为(我认为)它试图断言太快,例如页面渲染速度不够快。

以下是一段适用于Chrome和FF的代码,但不适用于IE:

driver.manage().timeouts().implicityWait(30, TimeUnit.SECONDS);
driver.navigate().to(targetAdminServer());
Assert.assertTrue("The startpage is displayed", driver.getTitle().startsWith("Admin Portal -"));
driver.findElement(By.id("loginForm:j_id4:username")).sendKeys(loginSAUsername());
driver.findElement(By.id("loginForm:j_id6:password")).sendKeys(loginSAPassword());
driver.findElement(By.id("loginForm:login")).click();
Assert.assertTrue("Login successful", driver.getTitle().contains("Welcome,"));

我收到以下错误:

java.lang.AssertionError: Login successful
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.assertTrue(Assert.java:41)
at first.example.project.webdriver.AddUser.I_am_logged_in_as_a_administrator(AddUser.java:36)
at ✽.Given I am logged in as a "administrator"(C:\path\cucumberfeature1.feature:5)

执行期间我可以看到webdriver用用户名和密码填充字段,然后在点击登录按钮后立即死亡。

对于可能导致此问题的任何想法都非常受欢迎。

更新: 我可以补充一点,如果我在Assertion之前添加Thread.sleep(1000)失败,它就可以正常工作。

UPDATE2:一位朋友问我是否可能因为IE通常以32位运行而其余浏览器以64位运行(因为我有64位操作系统),这有什么关系吗?用它?

UPDATE3:尝试使用64位和32位IEDriverServer,但没有及时断言。

2 个答案:

答案 0 :(得分:0)

登录后点击你需要一些等待元素。 当标题被更改时,你可以检查,但不是在事件发生之前。

答案 1 :(得分:0)

请配置如下:

  1. 输入注册表编辑器
  2. 请参阅HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl
  3. 找到密钥FEATURE_BFCACHE,如果找不到 - >创建1个DWORD iexplore.exe,值= 0
  4. 尝试在IE上运行您的测试用例并注意问题是否已解决 - >如果失败 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl并创建iexplore.exe,值= 0
  5. 我希望这对你有帮助:))