【问题标题】:How to make Nightwatch use xpath by default in page object files如何让 Nightwatch 在页面对象文件中默认使用 xpath
【发布时间】:2016-03-22 06:53:33
【问题描述】:

我所有的页面对象看起来都像这样:

  elements: {
      header: {
         locateStrategy: 'xpath',
         selector: "//h3[text()='Welcome']"
      },
      loginButton: {
         locateStrategy: 'xpath',
         selector: "//button[text()='Login']"
      },
      forgotPasswordLink: {
         locateStrategy: 'xpath',
         selector: "//a[text()='Forgot Password?']"
      },
      signupButton: {
         locateStrategy: 'xpath',
         selector: "//button[text()='Signup']"
      }

如果我能说“在任何地方都使用 xpath”会更好——这一切都会崩溃

The docs 说你应该可以在你的“测试设置”中设置"use_xpath" : true,但是我在 nightwatch.json 中可以看到的所有地方都试过了,它没有任何效果。

(在任何情况下,这个设置是否会影响页面对象文件中的声明并不完全清楚:该示例仅显示它会影响测试用例中的后续断言调用)。

【问题讨论】:

    标签: xpath pageobjects nightwatch.js


    【解决方案1】:

    您可以只使用这样的 javascript 函数(取决于您最喜欢的创建对象的方式):

    var xSelector = function (selector) {
        return {
            selector: selector,
            locateStrategy: 'xpath'
        }
    };
    

    然后像这样使用它:

    elements: {
    
        xxx: xSelector('//a[text()="Bank Details"]')
        createStepButton: { selector: '#menu-create-item' },
    }
    

    提示:在上面的示例中,createStepButton 仍在使用 css 选择器策略。还可以考虑创建一个 cssSelector 函数来统一元素部分的可读性。

    【讨论】:

    • 我遇到了同样的问题。我会冒险说 nightwatch.js 中有一个错误。守夜人队的任何人都愿意发表评论吗?我的测试套件正在增长并且有这个:locateStrategy:'xpath',我的代码并不好玩。
    【解决方案2】:

    尝试设置:

    "use_xpath": true
    

    nightwatch.conf.js 文件中,而不是nightwatch.json

    为我工作:)

    【讨论】:

      【解决方案3】:

      要解决这个问题,您可以遍历元素并为每个元素设置任何给定的定位策略,如下所示:

      var pageObject = {
          url: 'https://google.com',
          elements: {
              myFirstElement: {
                  selector: "//div[@class='my-first-el']"
              },
              mySecondElement: {
                  selector: "//div[@class='my-seconds-el']"
              }
          }
      };
      
      for (var el in pageObject.elements){
          pageObject.elements[el]["locateStrategy"] = "xpath";
      }
      module.exports = pageObject;
      

      【讨论】:

        【解决方案4】:

        也许它会帮助某人。

        尝试设置:

        "use_xpath": true
        

        在您的 nightwatch.json

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-18
          • 1970-01-01
          • 2020-09-04
          相关资源
          最近更新 更多