Nightwatch .execute()如何将参数传递给执行函数,这可能吗?

时间:2019-11-16 20:18:41

标签: nightwatch

请耐心等待-我是编程的初学者。测试人员已经很长时间了,但是编程不是我的专长。

我的测试是:

  1. 从后端我得到一些元素列表(例如5个文本字符串)
  2. 我单击页面上显示了这5个元素的元素(当然,我不知道列出的元素是否正确)
  3. 我需要检查ui上显示的元素列表是否是从后端接收的列表

问题:

  • 我无法通过Nightwatch api css选择器访问元素,至少我无法使用Nightwatch管理(Angular应用)
  • 我发现我可以用.execute()

我的代码(失败):

browser
            .click(selector.HEADER.APPS_GRID, function () {
                for (var app in appsList) {
                    let appShortName = appsList[app].shortName
                    let appLongName = appsList[app].longName
                    let appUrl = appsList[app].url
                    let appVisibility = appsList[app].visibility
                    browser.execute(function(app){
                        var appShortNameDisplayed = document.getElementsByClassName('logo-as-text')[app].innerText
                        var appLongNameDisplayed = document.getElementsByClassName('app-name')[app].innerText
                        return [appShortNameDisplayed, appLongNameDisplayed]
                    }, function(result){
                        console.log(result.value[0])
                    })
                }
            })

它在以下行中失败:

var appShortNameDisplayed = document.getElementsByClassName('logo-as-text')[app].innerText
var appLongNameDisplayed = document.getElementsByClassName('app-name')[app].innerText
  • 不幸的是,我必须使用[app]进行查询-按对象的元素进行迭代。如果我跳过[app].innerText,则会得到诸如 element-6066-11e4-a52e-4f735466cecf 之类的数据,而不是页面上显示的文本值

我收到错误消息:

  

运行.executeScript()协议操作时出错:TypeError:document.getElementsByClassName(...)[app]未定义

是否可以将“ app”参数(计数器)传递给文档查询?

还是我必须进行一次查询以返回所需数量的数据,然后处理此块中返回的数据的方式

function(result) {
   console.log(result.value[0])
  })

html页面的片段是

<div _ngcontent-c8="" class="ep-app-icon mt-auto mb-auto text-center logo-as-text"> XXX </div>

...,我需要获取此“ XXX”文本。

1 个答案:

答案 0 :(得分:0)

.executeAsync(function(){
            var buttons=document.getElementsByTagName('button');
            buttons[2].click();
            return buttons;
        },[],function(result){
            console.log('done')
        })

请尝试“异步”以确保其正常工作