在Cucumber JS中使用async / await处理元素子元素,而量角器不返回结果

时间:2019-01-11 10:58:29

标签: javascript async-await protractor

我正在尝试自动化一个非常琐碎的场景,在这种情况下,我必须将文本放入li元素的多个ul子元素中,并将其与给定数组进行比较。我正在使用带有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

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

如果有人可以指导我找到解决这个问题的方法,将不胜感激。

2 个答案:

答案 0 :(得分:0)

这应该为您工作:

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且不需要等待,而getText和{{ 1}}返回!webdriver.promise.Promise,并首先要求count语句。

答案 1 :(得分:0)

您可以缺少@Lunin Roman的答案:

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

textFromElements是string []的承诺。当您履行诺言时:

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

您应该获得一系列结果。