javascript - 断言元素列表遵循 JavaScript Promise 的规则

标签 javascript selenium webdriver promise chai

我有一组标题,它们看起来都像:

<div class='items'>
  * Some | Text *
</div>

<div class='items'>
  * Some more | Text *
</div>

鉴于页面上有许多 block 遵循这两种模式,我想循环遍历所有 block 并确保它们都包含模式 '* Some [more] |文本 *',其中 [more] 是可选的,* 可以是任何内容。

我目前有:

yield browser

...Some code...

.elements('.items')
 .then((elementList)=>{
  for(var i = 0; i < elementList.value.length; i++){

   this.elementIdText(elementList.value[i].ELEMENT)
    .then((currElement)=>{
      var str = currElement.value;
      if(str.indexOf("Some | Text") == -1 || str.indexOf("Some more | Text") == -1){
       assert.ok(false, 'invalid string');
      }
    })

  }
 })

但是,断言似乎被忽略了,因为它们位于 for 循环内(我猜这会搞乱一切,因为它不是异步的??)

虽然我希望程序在其中一个字符串与所需模式不匹配时立即抛出失败,所以我认为有必要使用循环。

有什么好的方法吗?

如果我将 console.log 放入 for 循环中,当前的行为:

Command: find element
Command: find element
... n times
log: element 1 text
log: element 2 text
... n times

它应该在哪里:

Command
log
Command
log
... n times 

最佳答案

找到了不使用 q Promise 库的解决方案!

(替代方案是使用 q 提供的 .all([]).then() 函数)

yield browser

...Some code...

.elements('.items')
 .then((elementList)=>{

  var chain = this; // start a promise chain

  for(var i = 0; i < elementList.value.length; i++){

   // add this whole promise to the chain every iteration
   chain = chain.elementIdText(elementList.value[i].ELEMENT)
            .then((currElement)=>{
              var str = currElement.value;
              if(str.indexOf("Some | Text") == -1 || str.indexOf("Some more | Text") == -1){
               assert.ok(false, 'invalid string');
              }
            })

  }

  // Simply return the chain of promises created
  return chain;
 })

这个想法是 .then 只是一个 promise ,其中的内容最终将被评估。这意味着只有在测试完成后才能评估里面的内容。

虽然一种解决方案是添加暂停(也许?),但通过创建一系列 Promise,下一个 Promise 直到前一个 Promise 才会被评估,因此,测试在所有代码运行后结束.

关于javascript - 断言元素列表遵循 JavaScript Promise 的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141578/

相关文章:

java - 如何处理selenium中的自动建议

testing - by.id 比 by.tagname 好吗?

python - 如何旋转 Selenium 网络浏览器 IP 地址

selenium - 如何从在新窗口中打开的WebDriver实例获取页面的URL

javascript - 如何使用 jQuery 异步上传文件?

javascript - Python selenium 选择一个不可见的复选框

javascript - 如何在特定时间段自动打开和关闭弹窗

java - 如何使用 Selenium 从自动完成文本框中选择文本

javascript - Angular2 - 有条件创建的输入字段的表单验证

卸载网页后 Javascript 内存泄漏