Selenium学习之路02-Webdriver API元素定位
大家对于我们在界面UI测试的时候流程非常熟悉吧,比如一个百度搜索,我们首先打开www.baidu.com的地址,然后肉眼找到搜索框,输入想要输入的关键字,然后在点击搜索按钮,就会返回我们想要搜索的结果列表。
而对于自动化测试来说,最基本的就是”肉眼查找”,也就是定位元素。而自动化工具如何找到元素了?对此WebDriver提供了八种元素定位方法。分别可以通过ID,name,class,tag,link,partial link,XPath,CSS进行元素的定位,除此之外还有通过By来声明定位的方法。
以下为截选的输入框的一段HTML
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
1.id定位
通过HTML元素的id来进行元素的查找,写法如下
find_element_by_id(“kw”)
2.name定位
通过HTML元素的name来进行元素的查找,写法如下
find_element_by_name(“wd”)
3.class定位
通过HTML元素的class来进行元素的查找,写法如下
find_element_by_class_name(“s_ipt”)
4.tag定位
通过HTML元素的class来进行元素的查找,写法如下
find_element_by_tag_name(“input”)
5.link定位
link即链接,专门用来定位文本链接,同前面几个方法有所区别,我们截取一段链接的HTML代码
<a href="http://map.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">地图</a>
用法如下:
find_element_by_link_text(“地图”)
6.partial link定位
partial link是对link的一种补充,比如有些文本非常长,而我们此时只需要截取文本的一段使用partial link来进行定位就可以节约工作量,用法如下
find_element_by_partial_link_text(“地”)
7.Xpath定位
Xpath是一种在XML文档中定位元素的定位语言。因为HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在WEB应用中进行定位。由于内容较多,所以我会单独写一篇来描述Xpath的定位
8.CSS定位
CSS(英文全称:Cascading Style Sheets)是一种用来表现HTML或XML等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
选择器 |
例子 |
描述 |
.class |
.s_ipt |
类选择器,选择所有class=”s_ipt”的元素 |
#id |
#kw |
Id选择器,选择所有id=”kw”的元素 |
* |
* |
所有元素 |
element |
Input |
元素所有<input>的元素 |
element>element |
span>input |
选择父元素为<span>的所有<input>元素 |
element+element |
span+input |
选择同一级中紧接在<span>元素之后的所有<input>元素 |
[attribute=value] |
[target=_blank] |
选择target=”_blank的所有元素” |
<?xml version="1.0"?> <span id="s_kw_wrap" class="bg s_ipt_wr quickdelete-wrap"> <span class="soutu-btn"></span> <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> <a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;"></a> <span class="soutu-hover-tip" style="display: none;">按图片搜索</span> </input> </span>
以上面HTML部分代码为例进行元素定位
a.通过class属性进行定位:
find_element_by_css_selector(“.s_ipt”)
b.通过id进行定位
find_element_by_css_selector(“.kw”)
c.通过标签名进行定位
find_element_by_css_selector(“input”)
d.通过父子关系进行定位
find_element_by_css_selector(“span>input”)
e.通过属性值进行定位
find_element_by_css_selector(“[autocomplete="off"]”)
9.用By定位元素
如果有看过以上定位API的源码会发现实际都是通过find_element()统一实现的,所以我们也可以通过By来声明定位的方法
具体如下
find_element(By.ID,”kw”) find_element(By.NAME,”wd”) find_element(By.CLASS_NAME,”s_ipt”) find_element(By.TAG_NAME,”input”) find_element(By.LINK_TEXT,”新闻”) find_element(By.PARTIAL_LINK_TEXT,”新”) find_element(By.XPATH,”//*[@class=”s_ipt”]”) find_element(By.CSS_SELECTOR,”.s_ipt”)
在此摘抄下find_element_by_id的源码
def find_element_by_id(self, id_): """Finds an element by id. :Args: - id\_ - The id of the element to be found. :Returns: - WebElement - the element if it was found :Raises: - NoSuchElementException - if the element wasn‘t found :Usage: element = driver.find_element_by_id(‘foo‘) """ return self.find_element(by=By.ID, value=id_)
参考书籍:
Selenium 2自动化测试实战 基于Python语言 ,虫师编著