Nightwatch ERROR:无法定位元素:using:css选择器

时间:2018-04-05 02:43:53

标签: javascript automation nightwatch.js

我是守夜人和javascript的新手,对于我的生活,我被困在一些奇怪的地方。我正在尝试进行一个简单的测试,只需一次点击三个不同的标签菜单项。当我运行代码时,我得到一个错误:无法找到元素:“@ Performing_AF”使用:css选择器。

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

我正在测试的网址是: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();
        }

   }

2 个答案:

答案 0 :(得分:0)

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

你的css选择器对我来说也很合适。您面临的错误是什么?

答案 1 :(得分:0)

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

您使用这些的方式是

  1. 点击标签
  2. 等待该标签上的某些元素显示/显示
  3. 点击下一个标签,然后重复
  4. 如果您真的想要保持暂停状态,可以通过在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)
    }