Keep Learning

10 January 2014

在使用selenium webdriver时,我们有很多时间都浪费在定位对象的各种尝试上。提升定位效率的关键还是在2个字:熟练。所谓熟能生巧,便是这个道理。不过这其中也是有一些技巧可以提炼出来并推而广之。定位对象的时候会遇到一系列的大坑,有人栽进去爬起来,有人进去了便再没能爬出来。仿佛这些坑是黑洞,吞噬了那些人前进的动力。但愿我总结的这些技巧可以帮助到一些人,当他们跌入深渊徒然求助的时候,希望这些技巧是一些救命绳索。出去的路是有了,但是肯不肯尽力去爬,这个就只能靠你自己了。

尽量使用稳定的属性进行定位

当页面发生变化时修改测试脚本通常是一件不太愉快的事情。有些时候代码写的烂,可读性差,哪怕是代码的作者都会在几天之后忘了这段代码的作用是什么,于是修改代码时的痛苦便不言而喻了。仿佛是几天前拉了一坨屎,现在需要去这坨大便里探索些什么东西出来,其结果只能是恶心自己,愉悦他人。

其实客观来说,selenium webdriver原生的代码可读性确实不高。因为所有的操作都是find element,各种by,如果再加上使用工具生成的xpath选择器,那么很可能会把代码写成密码,仿佛是毒药鹤顶红,无人能解。假如这是一段很稳定而且运行的很好的代码,那么这坨屎暂时是没有人需要去触碰的,这很好,稳定而和谐。但是前端永远是web开发中变化最频繁的部分,因此页面不变脚本稳定的概率基本上跟物价下跌的概率一样————为零。不过,确实是有一些办法可以让你改写脚本的规模降低,也就是说不需要伤筋动骨,只需要修修补补。

记住这些规则,也许在某一天会变得有用。

  • 基本上对于所有元素,特别是表单元素,你应该遵照这个规则来选择定位元素的属性。name > id > css > class > text > dom travel > xpath。总之就是有name就用name,其次选择id,再次选择css选择器,不到万不得已,不要用xpath。

  • 前端开发是你的朋友而不是敌人,让他们给你需要使用到的元素增加属性,这会节约大量时间。

  • 最好让自己有代码库的权限,自己动手增加属性也是很好的选择。

  • 对于使用class来进行元素定位,一定要记住selenium webdriver是不支持混合class形式的。也就是说你一次只能使用一个class属性,而不能使用多个。实在不理解就这样记住,以空格隔开的多个class的形式是不支持的。

  • dom元素比女人善变,不到万不得已不要使用依赖于dom结构的选择器。

  • class是善变的,但很多元素都有class属性,因此使用class属性做一些粗犷的定位是有必要的。