Selenium2+Python2.0自动化测试【3】 元素定位
1 元素定位
自动化需要掌握四步操作:获取元素,操作元素,获取返回结果,断言,最后自动出测试报告。
元素定位在这四个环节中是至关重要的,selenium的webdriver提供了八种基本的元素定位方法:
1.通过id定位:find_element_by_id()
2.通过name定位:find_element_by_name()
3.通过class定位:find_element_by_class_name()
4.通过tag定位:find_element_by_tag_name()
5.通过link定位:find_element_by_link_text()
6.通过partial_link定位:find_element_by_partial_link_text()
7.通过xpath定位:find_element_by_xpath()
8.通过css定位:find_element_by_css_selector()
前面六种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活。
接下来就来讲webdriver提供的八种基本元素定位方法。
1.1 环境准备
1.浏览器选择:Firefox
2.安装插件:Firebug和FirePath
工具>附加组件>搜索:输入插件名称>下载安装后重启浏览器
3.安装完成后,页面右上角有个小爬虫图标
4.插件安装完成后,点开附加组件>扩展,如下图所示
1.2 查看页面元素
以百度搜索框为例,先打开百度网页
1.第一步,点右上角爬虫按钮
2.第二步,点左下角箭头
3.第三步,将箭头移动到百度搜索输入框上,输入框高亮状态
4.第四步,下方蓝色区域就是定位的到输入框的属性:
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
1.2.1 元素定位:find_element_by_id()
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
从上面定位到的元素属性中,可以看到有个id属性:id="kw",通过它的id属性定位到这个元素,定位到搜索框后,用send_keys()方法模拟输入字符串。
1.2.2 元素定位:find_element_by_name()
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性定位到这个元素,定位到搜索框后,用send_keys()方法模拟输入字符串。
1.2.3 元素定位:find_element_by_class_name()
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素,定位到搜索框后,用send_keys()方法模拟输入字符串。
1.2.4 元素定位:find_element_by_tag_name()
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input,但是一般页面tag_name元素重复较多,定位不够精确,这里仅作用法介绍。
运行上面的代码会报错,标签定位用法没错,原因是如下图所示页面input标签不止一个,仅仅这样是找不到我们需要的元素。
1.2.5 元素定位:find_element_by_link_text()
定位百度页面上"新闻"这个按钮,查看页面元素:<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
从元素属性可以分析出,其中有个href = "http://news.baidu.com"是超链接,对于这种元素,可以用find_element_by_link_text方法
1.2.6 元素定位:find_element_by_partial_link_text()
如果一个超链接元素它的字符串比较长,输入全称的话,会显示很长,这种情况可以用模糊匹配方式find_element_by_partial_link_text(),截取其中一部分字符串就可以了;
定位百度页面上"hao123"这个按钮,查看页面元素:<a class="mnav" name="tj_trhao123" href="http://www.hao123.com">hao123</a>。
1.2.7 元素定位:find_element_by_xpath()
上述的定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,或者说它的属性很多重复的,这个时候就可以用xpath来进行定位,这里我们使用FriePath查看一个元素的xpath。
直接拷贝出来就可以使用:
XPath即为XML路径语言
不了解的可以到这里学习:
http://www.runoob.com/xpath/xpath-intro.html
http://www.w3school.com.cn/xpath/index.asp
1.2.8 元素定位:find_element_by_css_selector()
css是另外一种比xpath更为简洁语法,先学会如何用工具查看并使用,打开FirePath插件选择css
直接拷贝出来就可以使用:
对CSS不了解可以到这里学习:
http://www.runoob.com/css/css-tutorial.html