Nightwatch常用技巧(1)

482 阅读3分钟

参照Nightwatch官方文档总结了一些常用技巧

元素选择器

  • 选择器的附加选项

定位元素可以说是最常用的功能了。Nightwatch默认使用CSS选择器,也可以切换成Xpath。

官方给出的附加选项有以下几种:

- selector:选择器语法

- locateStrategy:使用的选择器种类,可以代入'xpath','css selector'([全部的选项参考此处](https://www.w3.org/TR/webdriver/#locator-strategies))
	## 切换选择器的方法还有一种就是使用useXpath()或useCss()

- index:返回复数元素里的第几个元素,默认返回第一个

- abortOnFailure:用在waitForElement*类Api上。如果设置为False,当waitForElement*失败时能够忽略Error继续下一个测试。默认值True
	## 如果希望全局都忽略同类Error,可以在nightwatch.json里设置abortOnAssertionFailure:False

- timeout:设置超时时间。用在waitForElement*类Api上。同样可以全局设置waitForConditionTimeout

- retryInterval:重试次数。用在waitForElement*类Api上。

- suppressNotFoundErrors:和abortOnFailure类似,可以忽略Error继续下一步测试,但设置值与abortOnFailure相反,默认为False,设置为True时可以跳过Error。
	用在click(),getText()等可能会抛出NoSuchElement error(元素不存在)的Api上。

选择器不加选项时,使用方法和selenium的find_elements_by_XXX类Api类似,将selector直接传递给waitForElement*,click()等Api。

但是如果想要使用上述其他选项,需要将selector和其他选项打包成一个object。

module.exports = {
  'Demo test': function (browser) {
	browser.
	    // 最简单的元素选择
	    .waitForElementVisible('input[type=search]')
	    // 与上面那行是一个意思
	    .waitForElementVisible({selector:'input[type=search]'})
	    // 增加了index的选项
	    .waitForElementVisible({selector:'input[type=search]',index:2})
	    // 增加了选择器改成xpath的选项(下一个步骤默认值还是CSS选择器)
	    .waitForElementVisible({selector:'//input[text()=login]',locateStrategy:'Xpath'})
	    .useXpath() // 之后的选择器都默认变成Xpath
	    // 如果条件里有中文,需要加上双引号
	    .waitForElementVisible(//input[text()="登录"]')
	    // 用“,”分割的不是选择器的选项,而是waitForElementVisible()自身的选项
	    .waitForElementVisible({selector:'//input[text()=login]',locateStrategy:'Xpath'}, 1000, false, function() {}, '输出Log:选择器%s 时间%d ms')
  }
};

各种Api的附加选项

  • 附加选项的语法

以waitForElementVisible()为例,有time,poll,callback等选项。

官方给出的附加选项有以下几种:

- usingstring,使用的选择器种类(相当于上述的locateStrategy)

- selector:stringObject,选择器语法

- time:number,设置超时时间。用在waitForElement*类Api上。同样可以全局设置waitForConditionTimeout

- poll:number,重试次数。用在waitForElement*类Api上。

- abortOnFailure:boolean,用在waitForElement*类Api上。如果设置为False,当waitForElement*失败时能够忽略Error继续下一个测试。默认值True
	## 如果希望全局都忽略同类Error,可以在nightwatch.json里设置abortOnAssertionFailure:False

- callback:function,Api执行结束后执行的function

- message:string,Api执行时输出的log

如果想要添加一个Api执行完毕后的callback,因为callback是选项中唯一一个function类型,只需要直接在选择器后面添加一个function就会默认作为callback执行。

但是例如time(超时)和poll(重试回数)都是number,当想要定义poll时,必须先在前面加上time选项。

module.exports = {
  'Demo test': function (browser) {
	browser.
	    // 添加callback,result是选择器返回的元素list
	    .waitForElementVisible('input[type=search]',function(result)=>{})
	    // 第一个number会被作为time,第二个number才会被作为poll
	    .waitForElementVisible('input[type=search]',1000,5,function(result)=>{})
	    // 选择器之后的最后一个string只会被当成message
	    .waitForElementVisible('input[type=search]','output msg')
	    // 第一个string如果作为选择器种类能够成立,就会被作为using,从第二个string开始找selector
	    .waitForElementVisible('css selector', '#index-container')
	      }
};

可以看到,像超时设定这种选项会在全局设置,选择器和Api的选项里重复出现。

当同一个设定重复被定义时,优先级别如下:

全局设定(写在nightwatch.json里的设置)>选择器的选项>Api的选项