【问题标题】:Handling elements child elements using async/await in Cucumber JS with Protractor returning no results在 Cucumber JS 中使用 async/await 处理元素子元素,量角器不返回结果
【发布时间】:2019-01-11 19:48:12
【问题描述】:

我正在尝试自动化一个非常简单的场景,我必须在 ul 元素的多个 li 子元素中获取文本并将其与给定数组进行比较。我正在使用 Protractor 和 Cucumber JS 并使用 async/await 来管理承诺。

我的场景 HTML 看起来像这样

       <div class="some-class">
          <ul class="some-ul-class">
               <li>
                <span>Heading1: </span>
                <span class="some-span-class> Value of Heading 1</span>
               </li>
               <li>
                <span>Heading2: </span>
                <span class="some-span-class> Value of Heading 2</span>
               </li>
               <li>
                <span>Heading3: </span>
                <span class="some-span-class> Value of Heading 3</span>
               </li>
               <li>
                <span>Heading4: </span>
                <span class="some-span-class> Value of Heading 4</span>
               </li>
               <li>
                <span>Heading5: </span>
                <span class="some-span-class> Value of Heading 5</span>
               </li>

我需要获取第一个 span 元素的值,即 Heading1Heading2 文本。我在 SO 中看到了很多方法,但都没有找到解决方案。大多数解决方案都没有实现async/await,如果我尝试它们,代码并没有达到预期的效果。

我提到的例子:Protractor Tests get Values of Table entries Protractor : Read Table contents

如果我尝试在async 块内使用map 函数,但会导致ECONNREFUSED 错误,因此建议不要这样做here

如果有人能指导我解决这个问题,我将不胜感激。

【问题讨论】:

  • 请出示您的async 代码,因为这就是问题所在。我要出去,链接this

标签: javascript async-await protractor


【解决方案1】:

这个应该适合你:

const elements = $$('.some-span-class');
const expected = [];
const elementsLength = await elements.count();
for (let i = 0; i < elementsLength; i += 1){
    const text = await elements.get(i).getText();
    expected.push(text);
}

当您使用async/await 时,您应该检查量角器方法api 返回的内容,例如$$ 返回ElementArrayFinder 并且不需要等待,而getTextcount 返回!webdriver.promise.Promise 并且需要@ 987654329@先声明。

【讨论】:

    【解决方案2】:

    你可以缺少@Lunin Roman 的回答:

    const elements = $$('.some-span-class');
    const textFromElements = elements.getText();
    

    textFromElements 是字符串 [] 的承诺。当你解决一个承诺时:

    textFromElements.then((result) => { console.log(result) )})

    你应该得到一个结果数组。

    【讨论】:

      猜你喜欢
      • 2017-09-14
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多