当前位置: 首页 > 知识库问答 >
问题:

nightWatch:等待没有pass/fail结果的元素

詹杰
2023-03-14

相关问题:

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

不过,这为我的测试添加了一个额外的断言,并人为地使报告的测试计数大于所需的值。

有什么想法吗?

共有1个答案

施彬彬
2023-03-14

好吧,我一起砍了点东西。我基本上使用browser.execute(function,params,callback)在selenium中将javascript发送到控制台

  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全局变量来执行等待时的元素检查频率。如果你需要帮助,写一篇评论。

 类似资料:
  • 我有一个应用程序,通过点击按钮(该数字被定义)用户创建任务(可调用)做一些计算。我希望任务完成时能够做出反应。使用Future.get()阻止应用程序。有什么方法可以在Callable返回结果时做出反应吗?

  • 问题内容: 我正在尝试用Java倒计时。 这是我的HTML 而我的JS: 但是由于某种原因,它不会等待超时时间,而是立即执行,以便在刷新页面时立即显示“完成”。我知道它实际上被执行了多次,因为如果我这样做,它会从45开始递减计数。为什么会绕过超时? 问题答案: 执行带有该参数的函数,并将结果传递给。你不要那样 相反,执行一个匿名函数来调用您的函数:

  • 问题内容: 我正在寻找一种方法来异步执行go中的两个函数,该函数返回不同的结果和错误,等待它们完成并打印两个结果。另外,如果一个函数返回错误,我不想等待另一个函数,只打印错误。例如,我具有以下功能: 这里https://play.golang.org/p/-8StYapmlg是我是如何实现它,但是它有太多的代码,我想。可以通过使用interface {}来简化它,但是我不想这样。我想要更简单的东西

  • 我对Java线程和并发有点陌生。我读过关于同步和锁定块的书。它们让其他线程等待第一个线程完成其工作。 我只想知道一种方式,如果线程a正在执行它的执行,那么线程B不应该等待并跳过共享代码块的执行。

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 我有一个方法getCount(id),它从数据库返回一个整数,作为CompletableFuture。我想遍历所有id,并获得所有它们的结果,并将它们添加到一个全局int。然后我想用那个int做些事情: 这会给出一个错误,因为您不能在Accept中将一个整数添加到另一个整数,因为它是一个消费者。怎么做?