1

请耐心等待 - 我是编程初学者。很长一段时间的测试员,但编程不是我的领域。

我的测试是:

  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] is undefined

是否可以将“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”文本。

4

2 回答 2

2

正如您自己的评论所暗示的那样,有一个args论点.execute是数组。数组元素将是传递给的函数中的参数execute。见https://nightwatchjs.org/api/commands/#execute

于 2020-01-06T22:15:31.000 回答
0
.executeAsync(function(){
            var buttons=document.getElementsByTagName('button');
            buttons[2].click();
            return buttons;
        },[],function(result){
            console.log('done')
        })

尝试异步它肯定有效

于 2020-01-16T11:45:15.870 回答