Nightwatch ERROR: Unable to locate element: using: css selector

Nightwatch ERROR: Unable to locate element: using: css selector

我是守夜人和 javascript 的新手,在我的一生中,我被困在一些奇怪的地方。我正在尝试做一个简单的测试,一次只单击三个不同的选项卡菜单项。当我 运行 代码时,我得到一个 ERROR: Unable to locate element: "@Performing_AF" using: css selector.

如果我继续使用 css 选择器直接反对使用代码工作的元素。有人可以指导我哪里出错了吗?

我正在测试的URL是:https://www.nypl.org/

这里是/pages/homepage.js

    var elements = {
     searchbutton: '.nyplHomepageApp button[name = "Search Button"]',
     Authortalksconversations: '.titleTabs #tab-0',
     Exibitions: '.titleTabs #tab-1',
     Performing_AF: '.titleTabs #tab-2',
     Other_Events: '.titleTabs #tab-3',
     DonateButton: '#donateButton',
     Shop: '#shopTopLink',
     loadicon: '.dcom-loader',
     searchboxbutton: 'button[type="submit"]',
     inputsearch: '.desktopSearch-form-inputBox #desktopSearch-form-searchInput'

   };

   var quicksearch = {
     go: function()
     {
             this
                     .waitForElementVisible('body', 6000)
                     .api.pause(2000)
                     .click('@Exibitions')
                     .pause(2000)
                     .click('@Other_Events')
                     .pause(2000)
                     .click('@Performing_AF')

     }

  };

 module.exports = {
     elements,
     commands: [quicksearch]
 };      

这里是 tests/homepagetest.js

     module.exports = {

'Q': function(browser) {
    var goto = browser.page.homepage();
    goto.go;


    //browser.end();
        }

   }

这对我来说很好用 ul.titleTabs > li#tab-2

您的 css 选择器也适合我。您遇到的错误是什么?

正如我在上面的评论中提到的,如果您从测试中删除所有暂停,它将起作用。我不确定这背后的原因。最好尽可能使用 waitForElementVisiblewaitForElementPresentpause() 会使您的测试不稳定且不可靠。

您使用这些的方式是

  1. 单击选项卡
  2. 等待该选项卡上的某些元素可见/出现
  3. 单击下一个选项卡并重复

如果您真的想保持暂停,您可以通过在 go 函数的顶部添加一些变量并使用这些变量而不是 @someElement 语法来让它工作。

go: function() {
      var exibitions = this.elements.Exibitions.selector;
      var otherEvents = this.elements.Other_Events.selector;
      var performingAf = this.elements.Performing_AF.selector;

      this
        .waitForElementVisible('body', 6000)
        .api.pause(2000)
        .click(exibitions)
        .pause(2000)
        .click(otherEvents)
        .pause(2000)
        .click(performingAf)
}