Python3+Selenium2完整的自动化测试实现之旅(三):Selenium-webdriver提供的元素定位方法

    本篇以实例介绍selenium下的webdriver模块提供的定位页面元素(也能够称为对象)的方法和使用技巧,在此注意:在作WEB自动化测试前,须要对前端相关的技术有所了解,如HTML、XML、Xpath、CSS、JS等,另外还须要学习Pyhton基础语法和编程规范,好比python代码块的缩进。css

1     前端技术名词解释

(1)    HTML:超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于建立网页的标准标记语言。能够理解为千姿百态的网页最原始的形态。html

(2)    XML扩展标记语言,设计用来传输和存储数据。HTML能够当作是XML的一种呈现。前端

(3)    Xpath一种在XML文档中查找信息的语言,一般为路径表达式。python

(4)    CSS层叠样式表。web

(5)    JS即JavaScript,web编程语言,现代软件网页JS脚本都会嵌入到HTML的标签中。编程

这些前端技术和语言,咱们无须深刻学习,只须要知道这些前端技术的特色和做用以及基本的语法特色便可,能够学习参考菜鸟教程:浏览器

https://www.runoob.com/cookie

2     Selenium-webdriver定位元素

下面以博客园注册页面为例,以下图:编程语言

 

你们都知道页面上有输入框、文本信息、按钮等,这些是什么?这些都是一个个元素,在软件中均可以看作是一个个对象。怎么经过自动化来识别并定位到这些元素或者对象呢?函数

Selenium-webdriver模块库提供了8种定位元素的方法:

(1)    find_element_by_id ()

(2)    find_element_by_name()

(3)    find_element_by_class_name()

(4)    find_element_by_tag_name()

(5)    find_element_by_link_text()

(6)    find_element_by_partial_link_text()

(7)    find_element_by_xpath()

(8)    find_element_by_css_selector()

 接下来咱们就要将鼠标移动到邮箱的输入框准备输入用户了,但是自动化工具没你聪明啊!它不知道这个输入框在哪啊,这个时候咱们来看下网页的真实面目,经过按F12或者右键选择【查看源】来看看网页原始的面貌,以下图:

 没错它就是网页最原始的HTML形态,咱们能够看到页面上的每个元素都是一行HTML代码。

上图定位的就是邮箱输入框所在的HTML代码行,HTML代码都是以标签对的形式存在,咱们能够看到输入框是一个input的标签,嘿嘿,咱们看到了id,没错,这个标签中描述的就是【邮箱】这个输入框的属性,有name、class、id等属性,就好像一我的同样,有名称、性别、体重等属性同样。有了这些咱们就可使用webdriver提供的方法来找到它。

一.        经过id定位

webdriver提供的方法为find_element_by_id()

咱们在Pycharm中新建一个register_page.py文件,经过id的方法定位到【邮箱】输入框这个元素并输入邮箱,而后退出浏览器,脚本以下:

二. 经过name定位
上面的【邮箱】输入框的元素HTML中也提供了name的属性了,这样咱们只须要把上面的脚本文件的email = driver.find_element_by_id(‘Email’)改成对应的name属性方法便可:
email = driver.find_element_by_name(‘Email’),若是HTML没有提供该元素的name属性,那咱们就无法使用name来定位它

三.        经过class定位

Class也是网页不少元素都有的一个属性,它的定位和id/name相似,注册页面的【注册】按钮,查看HTML可知其class属性值,以下图:

所以咱们定位该按钮元素是可使用:driver.find_element_by_class_name('btn ladda-button center-block cnblogs-btn-blue')来定位到该元素。

但该方法不建议常用,由于页面不少元素都会有class属性,若是网页复杂,经过class定位不免会出现class属性值同样的元素,那就没法彻底定位到该元素,仍是注册页面:咱们看看【密码】和【确认密码】两个元素属性,以下面HTML中这两个元素的class属性:

没错,它们的class属性彻底同样,这样,在定位这两个元素时是不能用class属性来定位的

四.        经过tag定位

tag 定位是取的该元素的HTML中描述该元素的标签的名称,如上面的【邮箱】输入框,它的tag标签就是一个input,咱们能够写为email=driver.find_element_by_tag_name(‘input’),可想而知一个网页通常会有不少input标签,此方法也是不建议单独使用,该方法只是针对很是简单的页面才有那么点用

五.        经过link定位

link_text()方法是经过元素标签对间的的文本信息定位,如上面的【注册】按钮咱们除了使用class、id等定位外,还可使用link定位:

这样咱们定位【注册】这个元素还能够写成:driver.find_element_by_link_text(‘注册’)

六.        经过partial_link定位

Partial_link其实只是对link方法的一种补充,也就是部分标签对文本信息定位。适用于标签对之间文本信息比较长的状况,咱们只需选取一部分文本就行。

咱们能够将上面定位的【注册】元素那行代码改成:
driver.find_element_by_partial_link(“注”)也是能够定位的

七.        经过Xpath定位

Xpath是一种在XML文档中查找信息的语言,通常为一段路径表达式,在学习Xpath定位前请务必先学习下XML、HTML以及Xpath的基本语法,这个方法也是最重要的准肯定位元素的方法,这样会对之后页面元素定位更加游刃有余。

学习能够参考W3SChool网站:

http://www.w3school.com.cn/index.html

Selenium-webdriver提供了find_element_by_xpath()的方法

(1)     经过绝对路径定位

因为HTML网页源代码也是一层一层的,经过Xpath绝对路径查找,就如找一我的同样,这我的必定存在某个惟一的空间地理位置,好比xx 省xx 市xx 区xx 路xx 号,一样咱们要找的这个输入框也是在HTML的一个位置,上图能够看到HTML是有不少层级的,这样咱们能够一层一层像剥笋同样找到它,以下为【邮箱】这个元素在HTML的层级位置

那么咱们的脚本定位【邮箱】输入框能够写成这样:

 这就是Xpath方法绝对路径写法,使用绝对路径你是彻底能够找到该元素的,只不过,你懂得,现代的网页多复杂多绚丽,可想而知HTML层级会不少,难道你还傻不拉几的从源头的html标签对开始写起吗?接下来,咱们使用xpath的相对路径写法来照样找到这个【邮箱】输入框的位置

 

(2)     经过相对路径定位

在使用相对路径定位前,须要去学习下HTML代码的相关知识和特色以及Xpath路径表达式的语法编写特色,多学点老是好的。

 下面使用相对路径来定位它,以下代码:

【邮箱】输入框的xpath表达式为//*[@id=’Email’]

这个表达式什么意思?双斜杠//表示从当前HTML文档中查找而不考虑它的位置,*匹配整个HTML,@表示获取元素属性,最后id=表示该元素的属性id值,这样咱们合理的使用Xpath的相对路径语法来定位元素将会起到事半功倍的效果。

后续的Xpath相关的步语法、轴语法以及相关的函数功能方法得学习灵活使用哦。

若是有使用Chrome浏览器的,还能够copy相关的Xpath路径哦,打开Chrome,按F12,以下图:

 

八.        经过CSS定位

此种方法其实和xpath相似,看我的习惯和爱好,也是须要咱们学习css的语法,这里不介绍。selenium-webdriver提供的方法为:find_element_by_css_selector()

总结:这样咱们了解selenium-webdriver模块提供的元素定位方法,这里LZ首推的方法:Xpath定位,而后再是id、name、link等定位,这些方法须要不断地学习和实践方才能运用的游刃有余,若是写多了元素定位的方法就知道Xpath必定是要掌握的,另外这些定位方法也能够结合起来共同定位给一个元素,目的就是要在一个网页中惟必定位到该元素。

下篇:介绍selenium-webdriver处理浏览器cookie、网页提示框处理、多窗口切换、鼠标键盘控制等方法

相关文章
相关标签/搜索