watir代码移植至watir-webdriver代码时需要注意的一些事项
最近在把watir代码移植到watir-webdriver。移植过程中发现了,也总结了一些经验,志之并分享。
webdriver的wait方法。
watir的wait方法是稳定且smart的,基本上调用browser.wait方法是可以保证浏览器渲染并加载dom完毕的。但是webdriver的wait方法却不是这样。watir-webdriver的wait方法仅仅是等待浏览器状态栏出现compelete状态。在有些情况下,出现compelete状态后,浏览器还是没有加载完成的,这就导致页面上一些对象无法定位。
解决方法:可以在操作元素前调用element.waituntilpresent方法,该方法保证element可见(visible)和可以操作(enable)。
index base 0
watir webdriver中,collection元素的索引是从0开始的,比如
browser.table(:id => mytable).rows[0] #代表选取table的第1行
而在watir中,collection元素索引是从1开始的,比如
browser.divs[1] #代码选取页面上第1个div
解决方法:尽量少用字面量来直接索引collection元素,比如
FIRST_COLUMN = FIRST_ROW = 1
browser.table(:id, 'tb1')[FIRST_ROW][FIRST_COLUMN]
这样如果移植到web driver的话只需要修改FIRSTCOLUMN和FIRSTROW这2个常量就可以实现全局替换了
某些方法不再支持
watir webdriver不再支持例如row_count, getAllContents等方法。
解决方法: 不再使用row_count等方法,或者自定义这些方法并动态加载进去,例如
Watir::RowContainer.module_eval do
def row_count
rows.length
end
end
由于移植只进行了部分,所以更多经验有得补充。