1、八大元素定位方式:
- id, 常用
- name, 常用
- class_name, 常用
- tag_name, 不常用
- link_text 通过超链接的文本定位, 不常用
- partial_link_text 通过超链接的文本一部分定位, 不常用
- xpath
- css_selector
from selenium import webdriver
#初始化浏览器对象
driver0 =webdriver.Chrome()
#打开浏览器
driver0.get("https://www.baidu.com")
#最大化浏览器
driver0.maximize_window()
"""通过id进行元素定位"""
e=driver0.find_element_by_id("kw")
e1=driver0.find_elements_by_id("kw")
"""通过name进行元素定位"""
e2=driver0.find_element_by_name("wd")
e3=driver0.find_elements_by_name("ws") #不存在的元素,得到的是空列表
"""通过class_name进行元素定位,web上显示的是class"""
"""
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
e4=driver0.find_element_by_class_name("s_ipt")
e5=driver0.find_elements_by_class_name("s_ipts")
"""通过tag_name(标签名称)定位,不常用,因为找出来的会很多"""
e6=driver0.find_element_by_tag_name("input")
e7=driver0.find_elements_by_tag_name("input")
"""通过超链接的文本定位
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>
"""
#全部匹配
e8=driver0.find_element_by_link_text("新闻")
e8.click()
#部分匹配
e9=driver0.find_element_by_partial_link_text("新")
e9.click()
#通过xpath定位元素//*[@id="s-top-left"]/a[1]
"""
//相对路径
*通配符
@属性
备注:""和''不能同时使用,通配符后要用[]
xpath表达式例子://*[@id="kw"] 或者用//input[@id="kw"],其中input表示的是标签名
"""
"""如下是通过xpath定位新闻,打开新闻"""
#通过xpath直接定位class属性为mnav c-font-normal c-color-t,找到新闻,在xpath中class值中间可以有空格
# e10=driver0.find_element_by_xpath("//*[@class='mnav c-font-normal c-color-t']")
# e10.click()
#通过先找到新闻的父节点(id属性为s-top-left)然后通过a标签为索引1找到新闻,在xpath中,索引是从1开始
# e11=driver0.find_element_by_xpath("//*[@id='s-top-left']/a[1]")
# e11.click()
#通过xpath的contains函数找到新闻,通过文本或者属性值
#text()代表text文本
# e12=driver0.find_element_by_xpath("//*[contains(text(),'新闻')]")
# e12.click()
e13=driver0.find_element_by_xpath("//*[contains(@class,'mnav c-font-normal c-color-t')]")
e13.click()
#通过css_selector定位百度搜索框
e14=driver0.find_element_by_css_selector("*[id=kw]")
e14.send_keys("淘宝网")
2、find_element与find_elements的区别:
----find_element查找一个页面元素,find_elements查找所有满足定位条件的元素
----find_element得到的是一个WebElement对象,
<class 'selenium.webdriver.remote.webelement.WebElement'>
而find_elements得到的是列表,
<class 'list'>
----若有多个元素满足条件,find_element只返回第1个元素,而find_elements则返回所有满足定位条件的WebElement的列表
----若找不到元素,find_element会报错,提示NoSuchElementException;而find_elements则返回空列表[]
3、可以通过判断find_elements得到的列表是否为空判断元素是否存在
if driver0.find_elements_by_id("kw"):
print("该元素存在")
else:
print("该元素不存在")
4、xpath与 css_selector优势:更精准定位元素、灵活性更高,可以组合多个特性、组合多个属性
5、通过看源码可以知道id,name,class_name,tag_name都是从css_selector封装的,所以八大元素定位可以就4种,即link_text,partial_link_text,xpath, css_selector四种元素定位
6、自动化测试中一般使用相对路径,不使用绝对路径。相对路径表示方式://,绝对路径表示方式:/
7、通过祖先和父亲进行查找
//span[@id='s_kw_wrap']/input[@class='s_ipt']
8、通过子元素找父元素
//input[@class='s_ipt']/..
9、标准xpath 表达式
- `//input[@class='' and text()=‘文本’]`
- //div/input[@class='' and text()=‘文本’] 父元素定位子元素
- //*[] * 任意标签名
- //input[@*="kw"] *任意标签名或者属性
- //input[@id]
- //input[contains(@class, 'value')]
10、轴运算、轴定位
- //input//following-sibling
- 哥哥、姐姐:preceding-sibling
- 弟弟、妹妹:following-sibling
- 祖先:ancestor
11、css 选择器
css选择器中 .s_ipt 相当于xpath中 class_name = s_ipt
css选择器中#kw 相当于xpath中 id = kw
css选择器中 input[id=kw] 等价于 xpath中 //input[@id="kw"]
12、xpath 与css的比较
---css:表达方式更加简洁,在主流浏览器中(比如火狐、chrom)查询速度快
---xpath:功能更强,支持更多的函数,可以查找父元素,也可以 轴定位;支持用 text 文本,css 完全不支持;对于一些复杂元素,xpath写法反而要简洁