【selenium】webdriver原理 以及 如何定位一个元素
selenium简介
selenium是一个工具集:
-
selenium1
thoghtworks公司员工用javascript写的
selenium IDE,selenium grid(分布式的自动化测试) , selenium RC(主要做自动化测试的核心,用javascript写的,存在环境沙箱问题(就是会阻止弹框的弹出和新的页面的打开,会认为是非法行为,所以会对自动化测试带来不便)) -
selenium2
谷歌的人对一代的环境沙箱问题进行了改进
webdriver -
selenium3
增加了一些浏览器的原生驱动 edge
webdriver的原理(我超重要的)
就像出租车的例子一样,
- 乘客上车之后告诉司机:
- 去爪洼城
- 从这里左转
- 直行200米,红绿灯右转
- 直行50米,停车
- 司机要做的就是:
- 插钥匙点火,启动汽车引擎
- 开一小段路后左转
- 加速,直行200米
- 右转,直行50米
- 减速停车,到达爪洼城
- 对出租车来说:
- 启动引擎
- 左转,直行
- 右转,停车
里面司机就相当于webdriver,车子相当于浏览器,乘客相当于脚本,类似于下图
如何定位这个搜索框?
这就相当于如何找到一个人,找到一个人可以通过他的名字,身份证号,家庭住址等定位倒塌,那么搜索框也是可以通过多种方式找到,可以通过id(在一个界面上是唯一的,相当于人的身份证号)去定位,也可以通过name(相当于人的名字,可能会重复)去定位,也可以通过class name(属性 也可能会重复)去定位
- id 和 name定位
- tag_name 和 class_name定位
- link_text 和 partial_link_text
- Css
- xpath
至于id怎么查找
-
点开开发者工具
-
点到Elements,然后右键想要找的东西,比如那个搜索框
-
然后就可以显示源代码
-
找到源代码的id那边就可以获取到他的id,比如说这个地方的id是wd,name是kw
这里可以用tag_name(input)进行定位吗?
不可以,因为界面中有很多个input,不知道要和哪一个进行交互
注意哦:定位的时候要确保此时的name,tag_name这些是唯一的,而且要注意class_name定位是不仅要确保当前的class_name必须唯一还要保证里面只包含了一个类,像下面这种的就定位不成功:
这里的类有四个:btn,self_btn,bg,s_btn,所以无法定位
万能的方法,可以定位所有的东西xpath
这个xpath也可以自己写
除了xpath也可以用css selector
也可以自己写就是id前面加#,name前面加*