概述
一、自动化原理
1、结构图:
自动化程序(selenium客户端库) <--> 浏览器驱动器 <--> 浏览器
其中自动化程序通过http协议与浏览器驱动器进行交互
2、安装:
(1)selenium客户端库:pip install selenium
(2)浏览器驱动器:需要额外下载,实际上就是一个exe文件,不需要其他操作
3、基本代码
from selenium import webdriver
#根据驱动器创建一个webdriver对象,并启动浏览器
wd=webdriver.Chorme('浏览器的路径/驱动器文件')# Chorme Firefox Ie Safari Edge
#利用wd对元素进行定位操作、对窗口等进行操作
wd.get('url') #请求访问对应网页
wd.quit() #关闭浏览器窗口
二、元素定位的几种常用方法
下面代码中的wd可以替换为WebElement实例,查找范围由原来的整个页面更改为对应元素的内部;比较特殊的xpath,当使用webelement时,参数前一定要加上.开头
1、id
elements=wd.find_elements_by_id('id值') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_id('值') #返回第一个符合条件的元素;如无,抛出异常
2、class
elements=wd.find_elements_by_class_name('class值') #以列表的形式返回所有符合元素;若无,空列表
elements=wd.find_element_by_class_name('class值') #返回第一个符合条件的元素;如无,抛出异常
3、name
elements=wd.find_elements_by_name('值') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_name('值') #返回第一个符合条件的元素;如无,抛出异常
4、tag
elements=wd.find_elements_by_tag_name('值') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_tag_name('值') #返回第一个符合条件的元素;如无,抛出异常
5、css选择器
elements=wd.find_elements_by_css_selector('参数') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_css_selector('参数') #返回第一个符合条件的元素;如无,抛出异常
(1)按照tag 参数:标签名
(2)按照属性
- id 参数:#id值
- class 参数:.class值
- 其他属性 参数: [属性名=’属性值‘] ,其中属性值的引号可省略
补充:属性值部分可以进行三总模糊查询,分别如下所示:
*= (包含) ^= (以...开头) $= (以...结尾)
(3)按照次序选择子节点 参数为 :nth-child(m) , 本身父元素的第m个子节点
参数为 :nth-last-child(m), 本身父节点的倒数第m个子节点
(4)按照类型选择子节点 参数为 :nth-of-type(m),本身父元素的第m个类型的子节点
参数为 :nth-last-of-type(m), 本身父节点的倒数第m个子节点
补充:(3)(4)中的函数可以使用两个特别的值:odd(奇数)和even(偶数)
(5)兄弟节点的选择
- 相邻兄弟 类型 + 类型
- 后续所以兄弟,包括表兄弟 类型~类型
(6)子代和后代的选择
- 子代 >
- 后代 空格
注意:css选择器还可以组选择,只需要用 逗号 隔开就好;也可以联合使用,只需要没有空格的连着写即可
6、Xpath选择器
elements=wd.find_elements_by_xpath('参数') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_xpath('参数') #返回第一个符合条件的元素;如无,抛出异常
绝对路径:以 / 开头,将每层依次写下,用 / 隔开,类似子代
相对路径:以 // 间隔 ,类似后代
不管是绝对还是相对路径,每一层都要有标签或者通配符*
(1)根据属性选择(id class与其他属性一视同仁)
格式 : [@属性名="属性值"],其中属性值的引号不可省,但是可单可双,要在标签或*后使用
也可以进行模糊查询,具体有三种形式:
- [contain(@属性名,'值')] 包含
- [starts-with(@属性名,'值')] 以...开头
- [ends-with(@属性名,'值')] 以...结尾,但是这属于xpath2.0语法,目前浏览器不支持
(2)根据次序选择
- 标签名[n]或者*[n] 分别表示选择标签名的第n个或者第n个
- 标签名[last()-n]或者*[last()-n] 分别表示标签名的倒数第n+1个或者倒数第n+1个
- 标签名[position()<n]或者*[position()<n] 其中<可以换成其他的比较符号,last()也可应用于n
(3)父节点 /..
后续亲兄弟节点 /following-sibling::*或tag名
前面亲兄弟节点 /preceding-sibling::*或tag名
注:也可以进行组选择,使用 | 连接
7、专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。
link复数定位find_element(s)_by_link_text()
partial_link复数定位find_element(s)_by_partial_link_text()
三、元素操作(点击、输入、获取以及鼠标和键盘操作等)
定位元素的函数 find_elements_by_xxx()返回一个WebElement对象element,然后就可以进行元素操作,常见的如下:
click(),send_keys(' ') ,text, get_attribute('属性名') [innerHTML outerHTML 是特殊的参数]
补充 : text属性如果不显示或只显示部分内容,可用get_attribute('innerHTML')或者('textContent')
输入框输入的内容不可以通过text属性获得,要用get_attribute('value')
四、实战技巧
1、radio checkbox select三种选择框元素
(1)radio和checkbox都对应input标签,type类型不同,分别对象单选和多选,一组的采用同一个name值
select对应的select标签,选项放在option标签内,默认为单选,在select中添加属性multiple改为多选
(2)radio click() 选中 ;checkbox click() 选中和未选中状态切换
(3)select有专门的类进行处理Select(select元素)实例化
(de)select_by_value() (de)select_by_index() (de)select_by_visible_text() deselect_all()
2、alert confirm prompt三种弹出框 alert=wd.switch_to.alert
(1)alert: alert.text ; alert.accept()
(2)confirm: alert.text ; alert.accept(); alert.dismiss()
(3)prompt : alert.send_keys() ; alert.text ; alert.accept(); alert.dismiss()
3、frame切换
(1)frame或iframe标签利用src属性指定一个html文件,使其嵌入到当前HTML文件中;但是由于wd的访问范围不包括嵌入页面的,所以如果需要访问嵌入文件的元素,需要切换frame
(2)wd.switch_to.frame(' ') 参数为frame的特征或者对应的webelement元素
wd.switch_to.default_content() 返回到原来的frame
4、窗口切换
wd.title
wd.switch_to.window(handle), 其中handle要通过wd.window_handles结合一些条件查找到的
mainWindow=wd.current_window_handle
5、界面等待管理
某些元素内容不会立即出现,wd捕捉不到。selenium提供了一个方案:周期性(0.5s)重新寻找元素,直到元素找到或者超出最大等待时间抛出异常;
wd.implicitly(n):最大等待时间为n毫秒
要注意的是,周期性寻找的前提是找不到,如果找到了虽然是不正确的,那这个是不会处理这个情况的(一般只能sleep下)
最后
以上就是完美抽屉为你收集整理的Selenium自动化框架理论总结的全部内容,希望文章能够帮你解决Selenium自动化框架理论总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复