如何使用Nightwatch获取元素文本/值/ innertext?

时间:2018-04-20 02:07:08

标签: json node.js selenium-webdriver nightwatch.js

我有10个相同类的元素(' botaoParametroAc')我想逐个检查并点击包含" id"的元素。作为文字。这是我现在的代码:

browser
    .waitForElementVisible('#txtBusca', 4000)
    .elements('class name', 'botaoParametroAc', function(res) {
      for(var item in res.value){
        console.log(item.text)
      }
    });

它正在返回" undefined"对于每个项目。

当我尝试打印res.value时,结果是:

  

{" ELEMENT":" 0.06577812833436414-2"}   {" ELEMENT":" 0.06577812833436414-3"}   {" ELEMENT":" 0.06577812833436414-4"}   {" ELEMENT":" 0.06577812833436414-5"}   {" ELEMENT":" 0.06577812833436414-6"}   {" ELEMENT":" 0.06577812833436414-7"}   {" ELEMENT":" 0.06577812833436414-8"}   {" ELEMENT":" 0.06577812833436414-9"}   {" ELEMENT":" 0.06577812833436414-10"}

如何获取每个元素的文本或属性?!

3 个答案:

答案 0 :(得分:0)

只是要更新,它现在正在运作。我需要获取每个元素的elementIdAttribute获取innerText以发现它,并在条件匹配时单击它。

        browser
        .waitForElementVisible('#txtBusca', 4000)
        .elements('class name', 'botaoParametroAc', function(result) {
            result.value.map(function(element, err) {
                browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
                    if (res.value == 'id') {
                        browser.elementIdClick(element.ELEMENT);
                    }
                })
            })
        })

答案 1 :(得分:0)

对我来说,使用elements + elementIdAttribute效果不佳。

我所做的是使用execute():

'Verify table summary': function (browser) {
    browser.execute(function (data) {
      var innerTotal = 0;
      document.querySelectorAll('.cell-with-number')
         .forEach(a => innerTotal += Number(a.innerText));
      return innerTotal;
    }, [], function(res) {
      total = res.value;
    });

var total将从脚本返回的值在浏览器的上下文中运行。

答案 2 :(得分:0)

从当前的 nightwatch 版本 (1.7.6) 开始,以与 Chromedriver 和 Geckodriver 兼容的方式执行此操作的最简单方法是使用 getElementProperty

browser.getElementProperty('#thisElementId .some-class-name', 'innerText', 
  function(result) {
    console.log('result', result);
  }
);