【问题标题】:Nightwatch: wait for element without pass/fail resultNightwatch:等待没有通过/失败结果的元素
【发布时间】:2023-03-03 21:58:01
【问题描述】:

相关问题:

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

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

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

有什么想法吗?

【问题讨论】:

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

标签: selenium selenium-webdriver nightwatch.js


【解决方案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 全局变量来检查元素的频率。如果您需要帮助,请写评论。

【讨论】:

    猜你喜欢
    • 2015-03-17
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2016-05-28
    • 2018-10-08
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多