页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等。webdriver就是利用元素的这些属性来进行定位的。
可以用于定位的常用的元素属性:
• id
• name
• class name
• tag name
• link text
• partial link text
• xpath
• css selector
对应于webdriver中的定位方法分别是:
• driver.find_element_by_name()——最常用,简单
• driver.find_element_by_id()——最常用,简单
• driver.find_element_by_class_name()
• driver.find_element_by_tag_name()——最不靠谱
• driver.find_element_by_link_text()——定位文字连接好用
• driver.find_element_by_partial_link_text()——定位文字连接好用
• driver.find_element_by_xpath()——最灵活,万能
• driver.find_element_by_css_selector()
定位元素的方法没有好坏之分,不同的场景有不同的适用方法,只要定位的唯一的一个元素的方法都是可以使用的
id 和name 定位
这是简单的高效的方法
1) id(唯一):指定标签的唯一标识
格式:
应用场景:
①根据提供的唯一id号,快速获取标签对象。
②用于充当label标签for属性的值:示例:,表示单击此label标签时,id为userid的标签获得焦点。
如:定位百度首页文本框的方法,我们可以使用id来定位(该元素提供的id属性,可以唯一定位到它):
driver.find_element_by_id(‘kw’)
2) name(不唯一):指定标签的名称
格式:
应用场景:
①form表单:name可作为转递给服务器表单列表的变量名;如上面的传到服务器的名称为:username=’text的值’。
②input type=’radio’单选标签:把几个单选标签的 name设为一个相同值时,将会进行单选操作。
男
女
③快速获取一组name相同的标签:获取拥有相同name的标签,一起进行操作,如:更改属性、注册事件等
如:定位百度首页右上角的“设置”链接,我们可以使用name来定位(该元素提供的name属性,可以唯一定位到它)。
driver.find_element_by_class_name(“s_ipt”)class name和tag name定位
class: 指定标签的类名
格式:
应用场景:
① CSS操作,把一些特定样式放到一个class类中,需要此样式的标签,可以在添加此类。
可以把多个类,放在一个class属性里,但必须用空格隔开;如:class=’btnsubmit btnopen’不是所有的前端开发人员都喜欢为每一个元素添加id 和name 两个属性,但除此之外你一定发现了一个元素不单单只有id 和name,它还有class 属性;而且每个元素都会有tag标签。
还是定位百度首页的文本框,除了用id方法定位之外,我们还可以用class name来定位(该元素提供的class属性,也可以唯一定位到它)。
driver.find_element_by_class_name(“s_ipt”)tag name 定位应该是所有定位方式中最不靠谱的一种了,因为在一个页面中具有相同tag name 的元素极其容易出现,很少具有唯一性。不用学习它了。
下图中标红区域就是tag name
• link text 与partial link text 定位
有时候需要操作的元素是一个文字链接,那么我们可以通过link text 或partial link text 进行元素定位。
比如,定位百度首页右上角的“新闻”,“hao123”,等等这些文字连接
通过linx text定位:
find_element_by_link_text(“新闻”)
find_element_by_link_text(“贴吧”)通过partail link text定位:
选择partial link text的时候,需要选择一个比较唯一的字段,来区分这个元素。
find_element_by_link_text(“新”)
find_element_by_link_text(“贴”)• XPath 定位
XPath是一种文档定位语言。因为HTML可以看做是XML的一种实现,所以selenium用户可使用这种强大的语言在web应用中定位。参考链接:xpath介绍
分“绝对路径”和“相对路径”两个方法。