Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中selenium webdriver在不同环境中测试的策略_Javascript_Selenium_Selenium Webdriver_Functional Testing_E2e Testing - Fatal编程技术网

javascript中selenium webdriver在不同环境中测试的策略

javascript中selenium webdriver在不同环境中测试的策略,javascript,selenium,selenium-webdriver,functional-testing,e2e-testing,Javascript,Selenium,Selenium Webdriver,Functional Testing,E2e Testing,我一直在使用SeleniumWebDriver和yadda库进行功能测试。问题在于,在我的不同环境中,相同的测试套件工作方式不同。例如: 在测试中,结果会根据我输入的环境而有所不同 Locallocalhost:5000 登台mystaging.domain.com 制作www.domain.com 此时,只有暂存测试失败,但在其他情况下,当internet连接速度较慢时,测试在生产中失败,但在暂存中通过。 主要问题是浏览器没有为测试准备好DOM,并且没有找到测试所需的元素 我试图解决这个问题的

我一直在使用SeleniumWebDriver和yadda库进行功能测试。问题在于,在我的不同环境中,相同的测试套件工作方式不同。例如:

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

Locallocalhost:5000

登台mystaging.domain.com

制作www.domain.com

此时,只有暂存测试失败,但在其他情况下,当internet连接速度较慢时,测试在生产中失败,但在暂存中通过。 主要问题是浏览器没有为测试准备好DOM,并且没有找到测试所需的元素

我试图解决这个问题的方法是,等待出现在我页面的根元素中,如下所示:

return driver.wait(() => driver.isElementPresent(By.css(".my__homepage")), 50000);
但这对我来说还不够,因为测试套件仍然随机失败。所以,我的问题是:


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

我向您展示了一个简单的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等待文档准备就绪
  • 另外,我对要访问的每个元素都进行隐式等待。我将预期条件用作ElementToBickable,因为ElementIsPresent有时并不意味着可以根据需要访问元素

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

DOM元素未就绪似乎是一个问题。在访问任何元素之前,应该对它们进行隐式等待。因此,如果您的响应时间随环境的不同而增加/减少,则不会中断测试。谢谢您的评论。我正试图等待,但这不起作用。你知道有没有一种方法可以100%确保我的测试等待整个HTML文档的加载,比如“就绪”事件之类的?我可以给你举一些例子。您是在使用C#还是Java(或其他什么)来实现Selenium?
   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
return driver.wait(() => driver.isElementPresent(By.css(".my__homepage")), 50000);
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)
{

}