Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用Nightwatch.js页面对象_Node.js_Selenium_Browser_Ui Automation_Nightwatch.js - Fatal编程技术网

Node.js 使用Nightwatch.js页面对象

Node.js 使用Nightwatch.js页面对象,node.js,selenium,browser,ui-automation,nightwatch.js,Node.js,Selenium,Browser,Ui Automation,Nightwatch.js,我想知道是否有一种方法可以在一个测试中使用多个页面对象,而不必在每个页面对象文件中指定url 所有测试都从使用launch\u url参数启动的登录页面开始,并通过单击按钮导航到其他几个url 我希望页面对象只包含元素选择器 我尝试过使用变量声明,例如 `var loginButton = loginPage.elements.login.selector` 但与在javascript文件中声明选择器相比,这并没有任何优势,我可以在测试开始时导入该文件您可以引用每个页面对象中的元素,而无需将

我想知道是否有一种方法可以在一个测试中使用多个页面对象,而不必在每个页面对象文件中指定url

所有测试都从使用
launch\u url
参数启动的登录页面开始,并通过单击按钮导航到其他几个url

我希望页面对象只包含元素选择器

我尝试过使用变量声明,例如

 `var loginButton = loginPage.elements.login.selector`

但与在javascript文件中声明选择器相比,这并没有任何优势,我可以在测试开始时导入该文件

您可以引用每个页面对象中的元素,而无需将它们分配给变量。语法与您预期的略有不同。以下是我在测试中如何做到这一点

比方说,我登录到我的应用程序,在仪表板上着陆,然后导航到管理菜单,并验证某个元素在该页面上是否可见。我的测试看起来像这样(假设我已经在
之前的
钩子中设置了页面对象变量):


无论您在哪里看到
@elementName
,都应该与您在页面对象中命名的元素相匹配

我不太确定我是否明白你想做什么。你能详细说明一下吗?你不想导航到每个带有url的页面,因为你已经通过点击按钮登陆了?你是在问如何引用页面对象中的元素,而不是像
var loginButton=loginPage.elements.login.selector
?这正是我想要的信息。万分感谢。是的,我刚去过那里。再次感谢
'Test example 1': (browser) => {
  loginPage.setValue('@usernameInput', username);
    .setValue('@passwordInput', password)
    .click('@loginBtn');

  dashboardPage.waitForElementVisible('@mainMenu', 1000, () => {
    dashboardPage.click('@mainMenu')
      .click('@adminMenuOption');

    adminMenuPage.verify.visible('@someElement');
  }
}