【问题标题】:Nightwatch .execute() how to pass parameter to execute function, is it possible?Nightwatch .execute() 如何将参数传递给执行函数,可以吗?
【发布时间】:2019-11-16 20:18:41
【问题描述】:

请耐心等待 - 我是编程初学者。长期做测试员,但编程不是我的领域。

我的测试是:

  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”文本。

【问题讨论】:

  • 好吧,我几乎可以肯定我昨天试过了,但是......在 function(result) 之前添加 [app] 使它工作

标签: nightwatch


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    .executeAsync(function(){
                var buttons=document.getElementsByTagName('button');
                buttons[2].click();
                return buttons;
            },[],function(result){
                console.log('done')
            })
    

    试试 Async 肯定可以的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2015-04-28
      相关资源
      最近更新 更多