如何使Nightwatch在页面对象文件中默认使用xpath

如何使Nightwatch在页面对象文件中默认使用xpath,xpath,pageobjects,nightwatch.js,Xpath,Pageobjects,Nightwatch.js,所有“我的页面”对象的外观如下所示: elements: { header: { locateStrategy: 'xpath', selector: "//h3[text()='Welcome']" }, loginButton: { locateStrategy: 'xpath', selector: "//button[text()='Login']" },

所有“我的页面”对象的外观如下所示:

  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']"
      }
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;
如果我可以说“随处使用xpath”,那会更好——这一切都会严重崩溃

假设您应该能够在“测试设置”中设置
“use_xpath”:true
,但我在nightwatch.json中看到的所有地方都尝试过,但没有任何效果


(不完全清楚这是否意味着该设置会影响页面对象文件中的声明,无论如何:该示例仅显示它会影响测试用例中的子序列断言调用)。

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

然后像这样使用它:

elements: {

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

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

为了绕过这一点,可以循环元素,并为每个元素设置任何给定的定位策略,例如:

  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']"
      }
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;

也许它会帮助别人

尝试设置:

"use_xpath": true
在您的nightwatch.json中,尝试设置: “使用xpath”:true

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


为我工作:)

我也有同样的问题。我敢说nightwatch.js中有一个bug。夜视队有人愿意发表评论吗?我的测试套件正在成长,而且在我的代码中到处都有这样的内容:locateStrategy:“xpath”,这对我来说并不有趣。夜视v1.5