javascript中的selenium-webdriver用于在不同环境中进行测试的策略

时间:2017-08-03 20:28:30

标签: javascript selenium selenium-webdriver functional-testing e2e-testing

我使用yadda库使用selenium-webdriver进行功能测试。问题是,在我的不同环境中,相同的测试套件工作方式不同。例如:

在测试中,根据我输入的环境,结果会有所不同。

本地 localhost:5000

Open my search site
      ․ when i go to my site: 2169ms
      ․ when i write a text on the search input: 21ms
      ․ when i click the search button: 130ms
      ․ then i get the results page.": 46ms

暂存 mystaging.domain.com

 Open my search site: 
         StaleElementReferenceError: {"errorMessage":"Element is no longer attached to the DOM","request":{"headers":{"Accept":"application/json; charset=utf-8","Connection":"close","Content-Length":"2"

制作 www.domain.com

   Open my search site
      ․ when i go to my site: 2169ms
      ․ when i write a text on the search input: 21ms
      ․ when i click the search button: 130ms
      ․ then i get the results page.": 46ms

此时,只有登台测试失败,但在其他情况下,当互联网连接速度变慢时,测试会在生产中失败但会通过升级。 主要的问题是浏览器没有为测试准备好DOM,他们也没有找到测试所需的元素。

我尝试解决此问题的方法,等待我的页面的根元素如下:

return driver.wait(() => driver.isElementPresent(By.css(".my__homepage")), 50000);

但这对我来说还不够,因为测试套件仍然随机失败。所以,我的问题是:

这可能是在不同环境中运行的最佳方法,测试套件处理浏览器上尚未准备好的元素?

1 个答案:

答案 0 :(得分:0)

我向您展示了一个简单的C#代码,我在IE浏览器中为我的工作做了这些代码,但它可以用于其他浏览器和语言。

private static WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(120)); //max driver wait timeout 120 seconds

try
{
    //waiting for document to be ready
    IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)driver;
    wait.Until(sc => jsExecutor.ExecuteScript("return document.readyState").Equals("complete"));

    //waiting for an element.
    //use 'ExpectedConditions.ElementToBeClickable' as in some cases element gets loaded but might not be still ready to be clicked
    wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("elementID")));
}
catch (Exception ex)
{

}
  • 基本上我正在等待文档准备好使用JavaScript executor
  • 此外,我正在隐藏等待我将访问的每个元素。我使用期望的条件作为ElementToBeClickable,因为有时ElementIsPresent并不意味着可以根据您的需要访问元素。

注意:Addiotinally您可能还需要根据需要检查其他元素属性(如启用/禁用等)。