2012-07-20 113 views
1

您将如何去检查以查看某个特定WebElement是否已更新?硒网络驱动程序测试网页元素已更新

我有执行形式保存,然后将UI返回成功/出错信息的测试。

我做了一系列的保存和我需要测试,看看消息是否符合预期。

硒的速度非常快,浏览器没有机会赶上。

这是我有用于测试的错误消息的代码(有一个等效成功消息功能以及)

public void assertErrorMessage(String errorMsg) { 

    // set the wait time a bit so the page can load. 
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
    List<WebElement> results = driver.findElements(By.xpath("//div[@id='lift__noticesContainer__']/descendant::*")); 
    boolean success = false; 
    String message = ""; 
    for (WebElement result : results) { 

     String id = result.getAttribute("id"); 
     if (id.contains("___error")) { 
      success = true; 
     } 
     if (result.getTagName().equals("li")) { 
      message += result.getText().trim(); 
     } 
    } 
    Assert.assertTrue(success, "No error message generated"); 
    Assert.assertTrue(message.equals(errorMsg), "Expecting message: \"" + errorMsg + "\" but got \"" + message + "\""); 

} 

作为该被写入时,这个查找特定<div>和存在检查是否包含某些属性。如果有,请收到消息。

的事情是,因为消息是比前一个不同,这将永远是真实的,因此我的测试是失败的,但该UI未赶上那里硒。

我的解决方法到目前为止强制的Thread.sleep(2000),只是暂停位,以允许UI赶上。我知道它使用Thread.sleep()会皱起眉头。

即(伪代码)

page.setField("value"); 
page.save(); 
Thread.sleep(2000); 
page.assertErrorMessage("Error message"); 

有没有什么办法让我查一下,看是否有WebElement已更新?如果是这样,我可以使用Selenium等待测试。

或者也许别人有一个建议如何做到这一点?

在此先感谢。

回答

3

如果每次执行page.save()时都显示结果。

,以确保您的代码等待浏览器更新的消息,最好的办法是使用WebDriverWait对象。

一个简单的例子是 -

new WebDriverWait(driver, 10).until(ExpectedConditions.textToBePresentInElement(By.xpath("xpath"), "message")); 

您可以检查是否是特定元素您正在寻找的信息。如果该消息在10秒后仍然不存在,则会抛出TimedOutException异常。

您可以检查出的ExpectedConditions为适合您的情况更多的变化。希望这可以帮助你。

+0

@ user1410479我认为这是正确的做法 - 只是试图等待正确的消息出现。如果你断言了一个预期的消息,它会工作得很好。如果你使用它来等待不应该出现的消息,它显然会让你的测试运行很长时间(每个这样的消息10秒)。 – 2012-07-20 14:28:51

+0

感谢您对此的帮助。你的建议奏效了!我将上述方法改为2行!我不知道为什么它没有来到我的等待消息。隐式与显式等待的使用仍然让我感到困惑。 – pipplupp 2012-07-25 04:26:42