世界上最远的距离大概就是明明看到一个页面元素站在那里 但是我却定位不到!!!
我们在做WEB自动化时 最根本的就是操作页面上的元素 首先我们要能找到这些元素 然后才能操作这些元素。工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素 那么我们该怎么来定位它们呢
selenium定位元素的方法有很多种 但宗旨只有一个 那就是能快速便捷的查找到唯一的元素 以及后期的方便维护 像是通过id、name、class_name、tag_name、link_text等等 但是这些方法局限性太大 拿id属性来说 首先一定不会每个元素都有id属性 其次元素的id属性也不一定是固定不变的。所以这些方法了解一下即可 我们真正需要熟练掌握的是通过xpath和css定位 一般只要掌握一种就可以应对大部分定位工作了。
-----------------------------分割线---------------------------------------------------------------------------------------
首先我先简单介绍一下其他定位方法
1.打开google浏览器 进入百度网页 按F12进入开发者模式 如下图
2.用鼠标点击下图红色框中的箭头——然后鼠标移动到web页面的元素上 此处为百度框 会自动定位到对应的html代码 如下图
3.通过元素存在的id、name、class属性来定位(id属性是唯一的 name class有可能一个页面多个属性是相同的)
driver.find_element_by_id(“kw”)
driver.find_element_by_name(“wd”)
driver.find_element_by_class_name(“s_ipt”)
ps 通过元素的name属性来定位元素 name属性不是绝对唯一的 一个页面内可能存在多个元素的name属性是相同的
1 如果name属性的值‘kw’是唯一的 用find_element_by_name定位元素 返回值是一个值
2 如果name属性的值‘kw‘不是唯一的 用find_elements_by_name定位元素 返回符合条件的多个值 保存在列表中 即返回的是列表
4. 通过元素的标签名tag来定位元素 标签名不是绝对唯一的 一个页面内可能存在多个相同的标签名
如果标签名是唯一的 用find_element_by_tag_name定位元素 返回值是一个值
driver.find_element_by_tag_name(“input”)
如果学过HTML知识 我们就知道HTML是通过tag来定义功能的,比如input是输入 table是表格等等。每个元素其实就是一个tag 一个tag往往用来定义一类功能 我们查看百度首页的html代码 可以看到有很多
等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定位方法。5. 通过链接元素的文本内容来精确匹配和模糊匹配定位元素 不是绝对唯一的 一个页面内可能存在多个链接元素的文本内容是相同的
1 精确匹配——文本内容为“新闻”
如果文本内容是唯一的 用find_element_by_link_text定位元素 返回值是一个值
driver.find_element_by_link_text(“新闻”)
2 模糊匹配——通过文本内容的部分内容 例如“hao123” 通过“hao”定位
如果文本内容是唯一的 用find_element_by_partial_link_text定位元素 返回值是一个值
driver.find_element_by_partial_link_text(“hao”)

后续文章再着重介绍下通过css和xpath元素的定位方法。



