Nightwatch:等待没有通过/失败结果的元素

Posted

技术标签:

【中文标题】Nightwatch:等待没有通过/失败结果的元素【英文标题】:Nightwatch: wait for element without pass/fail result 【发布时间】:2017-02-05 04:55:52 【问题描述】:

相关问题:

wait for element present without error Nightwatchjs: how to check if element exists without creating an error/failure/exception Selenium WebDriver : Wait for complex page with javascript(JS) to load

每当我加载网页时,我都需要等待 ajax 调用完成。我目前这样做:

browser.waitForElementNotPresent(
  "cssSelector_For_html_afterAJAXComplete",
  10000 //timeout
);

这为我的测试添加了一个额外的断言,并且人为地使报告的测试计数超出了必要的范围。

有什么想法吗?

【问题讨论】:

事实证明,使用nightwatch-cucumber 为我提供了必要的包装,使夜间测试报告更合适。我建议您使用这个库进行测试。 【参考方案1】:

好的,我一起破解了一些东西。我基本上是使用 browser.execute(function, params, callback) 将 javascript 发送到 selenium 中的控制台@

  function waitForElement_NoPassFail(selector, timeout)
    browser.execute(function(selector, timeout, done)
      let intervalId;
      var p1 = new Promise(function(resolve, reject)
        intervalId = setInterval(function()
          let itemArray = document.querySelectorAll(selector);
          if(itemArray.length == 1)
            clearInterval(intervalId);
            resolve(true); //element found
           else if(itemArray.length>1)
            reject(false); //too many elements found, because of ambiguous selector
          
        , 100);
      );
      var p2 = new Promise(function(resolve, reject)
        setTimeout(reject,timeout, false); //timeout reached
      );
      return Promise.race([p1, p2]).then(function(result)
        done(result);
      );
    ,
    [selector, timeout],
    function(result)
      if(!result)
        throw "Element: " + selector + " wasn't found after " + timout + " ms.";
       else 
        console.log("Element found within timeout limits.") //doesn't trigger assert=ok
      
    );
  ;

  waitForElement_NoPassFail(
    "cssSelector_that_Is_Valid_after_AjaxIsComplete",
    10000 //timeout
  );

这可以通过多种方式进行扩展,例如支持 xPath。您可以在等待时使用 nightwatch 全局变量来检查元素的频率。如果您需要帮助,请写评论。

【讨论】:

以上是关于Nightwatch:等待没有通过/失败结果的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nightwatch.js 或 javascript 列出具有共同属性值的相同元素?

在Nightwatch中迭代元素

如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素

nightwatch 基于Webdriver的端到端自动化测试框架

使用 Nightwatch 进行演示 - 通过配置减慢断言

如何使用页面对象在 Nightwatch.js 中运行多个 chai 断言?