元素定位学习

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写法反而要简洁

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值