补充:selenium定位30种
参考 https://blog.youkuaiyun.com/qq_32897143/article/details/80383502
进入正题:
webdriver的8种基本定位
先了解html的基本知识
<!-- id名为root的div -->
<div id="root">
<!-- class类名为top的div -->
<div class="top"></div>
<!-- 标签元素p,表示一个段落 -->
<p>段落1</p>
<!-- 超链接 -->
<a href="javascript:0;">点我</a>
</div>
<!-- from表单 -->
<form>
<!-- 一个输入框,name属性为username -->
<!-- name属性一般用于from表单中 -->
<input type="text" name="username"/>
</form>
id定位,推荐
// 匹配 id名 class类名 tag name标签名
find_element(“id”,“root”)
类名class定位
find_element(“class name”,“top”)
标签名定位
find_element(“tag name”,“p”)
name属性定位
find_element(“name”,“username”)
超链接定位(包含2种)
定位 a超链接 所包含的文本内容 "点我"
// 全匹配
find_element(“link text”,“点我”)
// 模糊匹配
find_element(“partial link text”,“我”)
xpath定位(万能的,推荐)
// 表示相对路径 /表示绝对路径 ./表示当前路径
/绝对路径必须一级一级下去,不能跨越
//相对路径就不需要一级一级下去
*表示任意元素,如果知道目标元素标签名,可以直接写
[@]用于属性的匹配
[n]用于匹配第n个元素,(如果只有1个可以省略)
//表示任意元素,只要id名为root的元素,它的下一级div取第1个
find_element(“xpath”,"//[@id=‘root’]/div[1]")
//知道开头的元素标签名
find_element(“xpath”,"//div[@id=‘root’]/div[1]")
css selector样式定位
通过id定位 class类名定位
find_element(“css selector”,"#id")
find_element(“css selector”,".class")
> 表示所有子元素
空格 表示所有后代元素
[属性名=‘属性值’] *=表示模糊匹配
:nth-child(0)第一个子元素
find_element(“css selector”,"#form > input[type=‘hidden’]:nth-child(11)")
find_element和find_elements
两者的区别就是前者会返回找到的第一个元素,找不到会报异常
后者会返回所有找到的元素,以[]的形式返回,没有就返回空[]
对于异常,可以通过try catch处理
总结
先看目标元素有没有id名,有id用id,最快最简单。
对于css属性不太了解,可以通过xpath定位,不过性能差些。
补充:万能定位方法
通过xpath定位,但是一般是/绝对定位,不推荐,能手写就手写!!!
细节
1、对于find_element 找不到元素会报异常
2、对于python的[] () {} 的区别
[]:列表,底层是动态链表数组,可以动态增加
():元组,底层是数组,定义后就不可以修改内容
{}:字典,就是类似json对象 {‘name’:‘wly’}键值对存储
参考: https://www.cnblogs.com/xuxiaolu/p/4726064.html