2016-09-27 264 views
1

相关问题:Nightwatch:等待元件,而不通过/失败结果

每当我打开我的网页,我需要等待ajax调用完成。我目前做这个用:

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

这增加了额外的断言我的测试,虽然,使得该报告人为大于必要的测试计数。

任何想法?

+0

事实证明,使用[nightwatch-cucumber](https://github.com/mucsi96/nightwatch-cucumber)为我提供了使夜间测试报告更合适的必要包装。我建议使用这个库进行测试。 –

回答

1

好吧,我一起砍了一些东西。我使用browser.execute(function, params, callback)

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基本上发送的JavaScript控制台中的硒。您可以在等待时使用夜间全局变量进行元素检查频率。如果您需要帮助,请写评论。