Selenium自动化框架理论总结

本文详细介绍了自动化测试工具Selenium的工作原理、安装步骤以及元素定位的各种方法,包括id、class、name、tag、css选择器和xpath。此外,还讲解了元素的操作、弹出框处理、frame和窗口切换、界面等待管理等实战技巧,是Selenium初学者的实用教程。
摘要由CSDN通过智能技术生成

一、自动化原理

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下)

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值