web自动化

第一章 Web自动化入门

自动化测试解决的问题:

  • 解决回归测试;
  • 解决压力测试;
  • 解决兼容性测试;
  • 提高测试效率,保证产品质量

自动化测试分类:

  1. web自动化测试
  2. 移动自动化
  3. 接口自动化
  4. 单元测试自动化

 什么web项目适合自动化:一般在手工测试后进行

  1. 需求变动不频繁
  2. 项目周期长
  3. 项目需要回归测试

 web自动化测试属于黑盒测试

自动化工具:

  • QTP:收费
  • selenium:免费,开源的web自动化测试,开源,跨平台,支持多浏览器
  • robot framework:基于Python可拓展性地关键字驱动的测试自动化

 安装selenium:

  1. python环境搭建
  2. 安装selenium     命令行中 pip install selenium     查看版本:pip show selenium  卸载:pip uninstall selenium  
  3. 安装浏览器    火狐浏览器48以上,采用selenium3.以上+驱动【要和浏览器版本对应】                              火狐48以下不用驱动 驱动下载地址:Releases · mozilla/geckodriver · GitHub                      谷歌浏览器  驱动下载地址:
     http://chromedriver.storage.googleapis.com/index.html                                                                                 驱动下载后将驱动所在目录添加到path环境变量中
  4. 安装浏览器驱动

第二章 Selenium-API操作

初步操作:

#寻包
from time import sleep
from selenium import webdriver
#打开网页
driver=webdriver.Firefox()
#driver=webdriver.Chrome()
#打开网址
driver.get('http://www.baidu.com')
#暂停三秒
sleep(3)
#关闭浏览器
driver.quit()

元素定位:

要想web自动化操作元素,必须找到元素。通过元素的信息或元素层级结果来定位元素

定位元素依赖于:1.标签名 2.属性 3.层级 4.路径

八种定位方式:

  1. id
  2. name
  3. class_name
  4. tag_name (标签名)
  5. link_text (定位超链接 a标签)
  6. partial_link_text (定位超链接 a标签 模糊)
  7. XPath (元素路径)
  8. CSS (元素选择器)

id定位案例:通过元素的id属性定位,一般是唯一的

步骤:

  • 寻包
  • 找到浏览器对象
  • 打开需求网址
  • 查找元素
  • 输入内容
#寻包
from selenium import webdriver
from time import sleep
#找到浏览器对象
driver=webdriver.Firefox()

#打开网址  使用双反斜杠进行转义工作//在绝对路径网址前面加r
driver.get(网址绝对路径)
#查找用户名、密码元素
username=driver.find_element_by_id('userA')
password=driver.find_element_by_id('passwordA')
#send_keys传输内容
username.send_keys('admin')
password.send_keys('123456')
sleep(3)
driver.quit()

name 定位:一般会有重名       class_name定位:一般有多个

from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get()
username=driver.find_element_by_name('userA')
password=driver.find_element_by_name('admin')
username.set_keys()
password.set_keys()
sleep()
driver.quit()

tag_name定位:

一般不能精准定位,当有多个相同标签名的,默认定位第一个指定标签名

link_text/paticial_link_text:

link_text:定位元素内容需要全部匹配

driver.find_element_by_link_text().click()

 paticial_link_text:定位元素内容可以是模糊,一部分的,但是需要唯一,如果不唯一,那么定位搜索到的第一个

XPath定位:

xml一种标记语言,xpath为xml path

element=driver.find_element_by_xpath(xpath)

定位策略:

  1. 路径-定位             绝对路径 :以单斜杠开头 如:/html/body/div/p[1]/input                                                          相对路径:以双斜杠开头,双斜杠后边跟元素名,不知元素名称可以用*代替                     如://input                      建议使用相对路径
  2. 路径与元素属性结合-定位     所有的属性前都要加@修饰  //input[@id='id属性值']
  3. 路径与逻辑(多个属性)结合-定位   //input[@id='id属性值' and @name='属性值']
  4. 路径与层级结合-定位          //input上一级标签名[@id='父级id属性值' ]/input

延伸:

//*[text()="xxx"]                    文本内容是xxx的元素

//*[contains(@attribute,'xxx')]             属性中包含xxx的元素

//*[starts-with(@attribute,'xxx')]          属性以xxx开头的元素

CSS定位; 效率比xpath快

element=driver.find_element_by_css_selector(css_selector)

定位策略:

  1. id选择器      #use   【选择id为use的】
  2. class选择器    .use    【选择class属性为use的】
  3. 元素选择器     输入input     【根据元素标签名称选择 】
  4. 属性选择器     [属性名=‘属性值']      【所有属性都可以用  】
  5. 层级选择器    p>input或 p input   【两者区别是p>input为相邻上下两级   p input 不必】

 延伸:

属性选择器中:可以寻找部分属性名

[属性名^='开头的字母']      查找属性名内容为对应开头字母的元素

[属性名$='结束的字母']     查找属性名内容为对应结束字母的元素

[属性名*='连续包含字母']     查找属性名内容包含对应字母的元素

p#login_user>input[name='user']

XPath和CSS可以在HTML中右键快速得到结果,但不建议使用

定义一组元素:

driver.find_elements_by_id():输出一组元素,类型为列表或

对列表进行访问或操作需要指定下标或遍历

例:element=driver.find_elements_by_css_selector(#userA);

      element[0].send_keys('admin');

用find_element()进行封装:

find_element(By.xxx,'value')

By.xxx:By.ID

By类需要导包:from selenium.webdriver.common.by import By

元素操作:

click()               单击元素

send_keys       输入文本

clear                 清除文本

driver.maxmize_window()  最大化浏览器窗口

 获取元素信息:

鼠标操作:

from selenium.webdriver.common.action_chains import actionchains

action=actionchains(driver)

action.context_click(driver.find_element_by_ccs_selector("#userA")).perform()

键盘操作:

键盘操作都在keys包里

from selenium.webdriver.common.keys import keys

username=driver.find_element_by_ccs_selector("#userA")

username.send_keys(Keys.BACK_SPACE)

元素等待:

 隐式等待:

如果没有找到元素就等待一定时间后再发出警告

driver.implicitly_wait(30)

 显式等待:

 

第三章 UnitTest框架

第四章 PO模式

第五章 数据驱动

第六章 日志收集

第七章 项目实战

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值