找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
1、什么是UI自动化
原本用手工操作ui页面的方式,现在用代码去实现自动化操作的方式
2、UI自动化的优点
1)解决重复性功能测试和验证
2)减少回归测试的人力 时间
3)减少回归测试在回归测试时漏测的现象
3、什么样的项目适合做UI自动化
1)需要比较稳定,需求变更不频繁
2)项目周期比较长
3)UI空间和页面元素不能频繁变更
4、UI自动化的应用场景
登录==》加入购物车==》下单  手工操作
==》可以用自动化去操作==》自动化回归测试
5、UI自动化的覆盖率
1)用例数量的覆盖率:站当前迭代用例总数的20%  ==》是把主流程的用例转化为自动化
2)场景覆盖率:70-80%
6、目前市面上主流程的ui自动化工具
1)python +selenium (要学习)
2)java +selenium
3)rebot framework +selenium2library
7、UI自动化的框架
python +selenium +unittest +po 分层
8、selenium 的优点 和缺点
1)支持多平台 windows linux
2)支持多浏览器 chrome 火狐 ie
3)支持多语言 python  java
缺点:只能做UI自动化  就是一个库
9、selenium 安装
1)win +R ,输入cmd
2)进入python 安装路径,cd C:\Python37\Scripts  假如在d盘  输入d:
3)输入 pip install selenium==3.141.0
如果报错运行:python -m pip --upgrade pip  运行这个
10、selenium项目了解
1)pip install   python自带的安装工具
2)dos 窗口使用 pip list   ==》查看当前python安装了哪些第三方库
3)pip安装好的库一般是在 C:\Python37\Lib\site-packages 里面
11、selenium原理
1)selenium 库中有一个webdriver包,webdriver包里面有一个chrome包,里面有一个webdriver模块
2)在C:\Python37\Scripts 放入 chromedriver.exe 驱动
12)selenium 中元素定位方法
webdriver 模块提供了9种定位方法
①id 定位
如果把元素定位看成一个人的话,id就是身份证  唯一  通过id属性定位
1、谷歌浏览器 f12
2、鼠标空白处右键点击检查
②、name定位
name属性好比一个人的名字,可以重复,也可以唯一
③class 定位
class 和name差不多,可以重复 可以唯一
④ xpath 定位
xpath 是通过路径定位元素(绝对路径和相对路径)
from selenium import webdriver   #通过selenium库导入webdriver包
from time import sleep

driver = webdriver.Chrome()        #创建一个driver对象或者说一个浏览器对象,
# 打开一个空白的浏览器 通过webdriver模块调用了Chrome() 类
driver.get('http://www.baidu.com')     #打开百度
driver.maximize_window()              #窗口最大化
sleep(5)                             #等待3s
元素定位id
1)id 定位法
driver.find_element_by_id('kw').send_keys('python')
2)name定位法
driver.find_element_by_name('wd').send_keys('python')
3)class 定位法
driver.find_element_by_class_name('s_ipt').send_keys('python')
4)link_text 定位链接
driver.find_element_by_link_text('hao123').click()  #点击链接
5)partial_link_text 模糊匹配
driver.find_element_by_partial_link_text('123').click()
6)JavaScript 定位,var 是JavaScript里面定义变量的 a 是变量
js = 'var a =document.getElementById("kw").value="python"'
driver.execute_script(js)        #执行
7)tag_name 定位
s = driver.find_element_by_tag_name('input')     #这个只适合一个input标签
s = driver.find_elements_by_tag_name('input')      #定位input标签放到列表中
print(type(s))       #数据类型
print(len(s))        #17
for i in s:
if i.get_attribute('id')=='kw':
#i 就是一个一个input标签,当判断是百度输入框的那个input就输入python
i.send_keys('python')
8)xpath 定位
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('python')
driver.find_element_by_xpath('//*[@name="wd"]').send_keys('python')
driver.find_element_by_xpath('//*[@class="s_ipt"]')
driver.find_element_by_xpath('//*[@name="wd" and @class="s_ipt"]').send_keys('python')   #组合标签
driver.find_element_by_xpath('//*[@autocomplete="off"]').send_keys('python')
driver.find_element_by_xpath('//*[@id="form"]/span[1]/input[1]').send_keys('python')
#id = form 是input的上上级,input的上级是span标签,span是form下第一个标签再
下面的第一个input
9)css定位
driver.find_element_by_css_selector('#kw').send_keys('python')     #id选择器定位
driver.find_element_by_css_selector('.s_ipt').send_keys('python')  #class选择器
driver.find_element_by_css_selector('[name=wd]').send_keys('python')
driver.find_element_by_css_selector('[class=s_ipt]').send_keys('python')
driver.find_element_by_css_selector('[name=wd][class=s_ipt]').send_keys('python') #组合选择器
driver.find_element_by_css_selector('[autocomplete=off]').send_keys('python')
driver.find_element_by_css_selector('span>input').send_keys('python')   #找上级
driver.find_element_by_css_selector('form>span>input').send_keys('python')  #找上上级 找上上级标签
10)
1、定位文本框和密码框
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
driver.maximize_window()
sleep(3)
driver.find_element_by_id('userAccount').send_keys('admin')
driver.find_element_by_id('loginPwd').send_keys('123456')
driver.find_element_by_id('loginBtn').click()    #点击登录按钮
2、通过send_keys方法上传文件
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/upload_file.html')
driver.maximize_window()
sleep(3)
第一种方法
driver.find_element_by_id('file').send_keys(r'C:\Users\Administrator\Desktop\data.csv')
第二种方法
ele =driver.find_element_by_id('file')
ele.send_keys(r'C:\Users\Administrator\Desktop\data.csv')
3、定位百度隐藏框
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains    #ActionChains 类
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
sleep(3)
第一种方法
点击设置==》然后选择搜索设置
driver.find_element_by_id('s-usersetting-top').click()     #点击设置
driver.find_element_by_link_text('搜索设置').click()     #点击设置后再搜索设置哪里右键检查定位
sleep(2)
第二种方法 模拟 mouse orver  鼠标悬浮
mouse = driver.find_element_by_id('s-usersetting-top')    #定位赋值给mouse
ActionChains(driver).move_to_element(mouse).perform()
#move_to_element 就是鼠标移动到设置上面   perform() 执行这个操作
driver.find_element_by_link_text('搜索设置').click()
sleep(2)
driver.find_element_by_link_text('保存设置').click()   #点击保存设置
sleep(2)
alert = driver.switch_to.alert        #进入到alert弹框
print(alert.text)                #打印弹框的信息  打印文本   已经记录下您的使用偏好
alert.accept()                  #点击确定按钮
alert.dismiss()                 #点机取消按钮
4、selenium 当中的等待
'''
1 线程等待   sleep(5)   不管有没有加载出来都会等待5s  强制等待
2 隐式等待   implicitly_wait(5)    智能等待,作用域全局,如果再5s内全部网页元素加载完成则继续
往下执行,超过5s则报错
3 显示等待 WebDriverWait   只作用于特定的元素,每个几秒去刷新和寻找页面元素,如果找不到
则往下执行,超过5s则报错
'''
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait      #导入显示等待的包
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
sleep(3)                 #线程等待
driver.implicitly_wait(5)      #隐式等待
driver.find_element_by_id('kw').send_keys('python')
WebDriverWait(driver,5,poll_frequency=0.5).until(EC.presence_of_all_elements_located((By.ID,'su')))
driver.find_element_by_id('su').click()    #点击百度按钮
sleep(5)
driver.close()
5 获取text文本信息和title
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')
driver.maximize_window()
# 1)获取文本
value = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').text  #获取页面元素
if value=='hao123':
print('获取成功')
else:
print('获取失败')
2)获取title
断言
title = driver.title       #获取标题
print(title)
if title =='百度一下,你就知道':
print('获取成功')
else:
print('获取失败')
assert title=='百度一下,你就知道'      #不会有打印结果
6 刷新窗口  打开一个新的窗口 返回上一步  获取窗口大小
1)获取窗口大小
size = driver.get_window_size()
print(size)   #{'width': 1296, 'height': 696}

# 2)返回上一步
driver.find_element_by_id('kw').send_keys('python')
sleep(5)

driver.find_element_by_id('su').click()
sleep(3)
driver.back()     #返回上一步
sleep(3)
# 3)刷新窗口
driver.refresh()

# 4)打开一个新窗口
win = 'window.open("http://www.jd.com")'
driver.execute_script(win)
7) 切换窗口
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
打开第一个窗口
driver.get('http://www.baidu.com')
driver.maximize_window()
打开第二个窗口
win = 'window.open("http://www.jd.com")'
driver.execute_script(win)
title = driver.title
print(title)       #百度一下,你就知道  当前主窗口是百度
handle = driver.current_window_handle       #获取当前主窗口百度的句柄
#句柄:是一个用来标识的对象
print(handle)       #CDwindow-2F4444FCA95D218C0104681A947B0BD1
all_handle = driver.window_handles      #获取所有窗口的句柄
print(all_handle)  #['CDwindow-39CFEA72D8404179150BE6545D76468C', 'CDwindow-6B373C86709BEC4ABF146808CAE46B97']
1)通过索引取值去切换窗口
driver.switch_to.window(all_handle[1])      #切换窗口
title1 = driver.title
print(title1)      #  京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
2)通过for循环
for i in all_handle:
if i !=handle: #判断如果i 不是当前百度句柄,那就切换窗口
driver.switch_to.window(i)     #切换京东窗口
title2 = driver.title
print(title2)      #京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册