UI自动化-01

发布时间 2023-03-22 21:13:32作者: jormen

  UI自动化环境

1、selenium

2、浏览器启动(使用的浏览器版本对应的驱动)

3、浏览器

 

selenium库的介绍:selenium的核心是webdriver,通过发送http请求到浏览器驱动,再由驱动解析指令发送到浏览器,就像用户在真实操作浏览器一样。

特点

1、开源免费

2、支持多语言:python、Java、JavaScript等(因为webdriver基于json wire protocol协议)

3、支持多浏览器:IE、chrome、Firefox、edge等

4、支持多平台:windows、Linux、mac

 selenium工作的原理:c/s架构

client:python或者Java等语言编写的selenium脚本作为客户端,向服务器发送http请求


server:将浏览器比作服务端,接受http请求,做出相应的处理并将执行的结果返回到代码端

UI自动化分两部:
1、定位元素:告诉浏览器操作的元素对象
2、对元素操作:如何操作

python+selenium:实现UI自动化
为什么要使用自动化?
版本迭代的时候,通过运行自动化脚本测试,提供工作效率(首先保证项目稳定)

三:为什么要UI自动化,做UI自动化有什么好处?有什么缺点?
1.UI自动化:原本用手功操作用户UI界面的方式,通过脚本取代替手工执行的操作和验证行为
2.当项目的功能越来越多,测试人员在执行回归测试时(针对旧版本的功能做测试)工作量非常大,会很辛苦而且时间可能不够,所有需要自动化来帮助我们做回归测试,
新功能做好之后可能会影响旧功能,有了自动化脚本跟执行之后,就可以监控旧版本是否会影响,如果影响到就及时发现。
3.代替人工执行回归测试,解决重复性的工作,减少人力成本是时间成本提高效率,守护版本质量,可以配合其他模块使用:比如pymysql来对数据库中的数据进行验证
4.需要具备编写自动化脚本能力的人员,编写自动化脚本需要投入大量人工跟时间,需要不断维护,不是所有的功能都可以实现自动化,比如依赖其他系统的功能

四:什么项目适合做UI自动化?
1.项目周期要足够长,至少一年以上
2.项目中的功能模块和相关界面要相对稳定
3.领导比较看好自动化,也非常熟悉自动化带来收益

五:面试可能问的相关问题?
1.你怎么做的UI自动化?
2.你自动化做了多久?
3.你写了多少自动化用例?
4.你觉得自动化有哪些优点?
5.你的自动化用的是什么框架,是不是你自己写的框架?
6.你的框架是怎么设计
7.你怎么定位页面元素的?(定位元素有哪些方法)
8.selenium中三种等待方式是什么,各自有什么优点?
9.窗口怎么切换
10.你做UI自动化的时候经常会遇到哪些问题?

元素定位:
find_elements()         复数形式,针对定位的标签存在多个的情况,定位到的所有标签以列表的形式返回
find_element() 针对需要定位的标签只有一个的时侯

一:UI自动化元素定位八大法:
id,name,class,tag_name,link_text,partial_link_text,xpath,css

from selenium import webdriver #通过selenium导入webdriver
from selenium.webdriver.common.by import By #导入By类

driver=webdriver.Chrome() #实例化一个谷歌页面对象,打开一个空白页 driver就是实例化对象的一个名字,可以随意取
driver.get('https://www.baidu.com/') #打开百度地址
driver.maximize_window() #窗口最大化,将页面最大化,不在当前屏幕显示的元素会定位失败

1、id定位法:
driver.find_element(By.ID,'kw').send_keys('python') #send_keys(),通过这个函数输入内容

2.name定位法:
driver.find_element(By.NAME,'wd').send_keys('python')

3.class_name(class)定位
driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('python3')

4.link_text 精准文本定位,输入的文本内容需要和页面元素一样
driver.find_element(By.LINK_TEXT,'贴吧').click() #click()函数点击按钮

5.partial_link_text 模糊文本定位,只要页面元素包含输入的文本
driver.find_element(By.PARTIAL_LINK_TEXT,'地').click()

6.tag_name定位,通过便签名字定位,一般用于定位便签只有一个的情况
driver.find_element(By.TAG_NAME,'input').send_keys('douyu') #定位失败,因为存在多个input标签
a=driver.find_elements(By.TAG_NAME,'input') #将定位到的input标签返回到列表
print(a)
for i in a: #遍历出所有的input的标签
if i.get_attribute('id')=='kw': #get_attribute()通过标签属性获取属性值
i.send_keys('BILIBILI')
time.sleep(3)
driver.close()

7.xpath定位

//*[@id='kw']
@:表示属性
//:表示的是同一个层次关系,相对路径
*:表示任意标签

driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('python6') #通过xpath的相对路径
driver.find_element(By.XPATH,'//*[@name="wd"]').send_keys('python3')
driver.find_element(By.XPATH,'//form/span/input[@name="wd"]').send_keys('python2') #手动写的xpath相对路径
copy full xpath:复制绝对路径,如果通过xpath相对路径定位不到就使用绝对路径
driver.find_element(By.XPATH,'/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('python3')

8.css定位

#:表示id选择器
.:表示class选择器

driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('清明节') #使用id选择器
driver.find_element(By.CSS_SELECTOR,'.s_ipt').send_keys('植树节') #使用class选择器
driver.find_element(By.CSS_SELECTOR,'[name=wd]').send_keys('python2') #通过属性值定位
driver.find_element(By.CSS_SELECTOR,'form>span>input[name=wd]').send_keys('python3') #通过增加路径定位



二:UI自动化中常用的控件操作
send_keys():用于在文本输入内容和上传文件
click():点击按钮

from selenium import webdriver #通过selenium导入webdriver
from selenium.webdriver.common.by import By #导入By类

driver=webdriver.Chrome() #实例化一个谷歌页面对象,打开一个空白页 driver就是实例化对象的一个名字,可以随意取
driver.get('http://cms.duoceshi.cn/cms/manage/login.do') #打开cms地址
driver.maximize_window() #窗口最大化,将页面最大化,不在当前屏幕显示的元素会定位失败

1.文本框,密码框和上传文件
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() #定位登录按钮,点击
time.sleep(3)
driver. Close()

使用send_keys上传文件
driver.get('file:///E:/ruanjian/Hbuilder/wenjian/dcs31/js/%E5%AD%A6%E7%94%9F%E7%99%BB%E8%AE%B0%E6%8A%A5%E5%90%8D%E8%A1%A8.html')
driver.maximize_window()
driver.find_element(By.XPATH,'/html/body/form/table/tbody/tr[8]/td[2]/input').send_keys(r'E:\xuexi-ceshi\第二个月\day33-03-20-python07\UI自动化.doc')

2.隐藏框定位===》鼠标悬浮
from selenium import webdriver #通过selenium导入webdriver
from selenium.webdriver.common.by import By #导入By类
from selenium.webdriver.common.action_chains import ActionChains #导入ActionChains类用于模拟鼠标悬停

i=webdriver.Chrome() #实例化一个谷歌页面对象,打开一个空白页 i就是实例化对象的一个名字,可以随意取
i.get('https://www.baidu.com/') #打开百度地址
i.maximize_window() #窗口最大化,将页面最大化,不在当前屏幕显示的元素会定位失败

ele=i.find_element(By.ID,'s-usersetting-top') #定位’设置‘元素,赋值给到变量ele
ActionChains(i).move_to_element(ele).perform() #move_to_element()鼠标移动到指定元素,perform()执行操作
i.find_element(By.LINK_TEXT,'搜索设置').click() #点击搜索设置
time.sleep(3)
i.close()

3.获取页面text文本信息
value=i.find_element(By.XPATH,'//*[@id="s-top-left"]/a[2]').text
print(value)
if value=='hao123':
print('获取成功')
else:
print('获取失败')

4.关于窗口的操作:
i=webdriver.Chrome() #实例化一个谷歌页面对象,打开一个空白页 i就是实例化对象的一个名字,可以随意取
i.get('https://www.baidu.com/') #打开百度地址
i.maximize_window() #窗口最大化,将页面最大化,不在当前屏幕显示的元素会定位失败
获取窗口的大小
size=i.get_window_size()
print(size) #{'width': 1936, 'height': 1048}

获取窗口的title
title=i.title
print(title) #输出结果:百度一下,你就知道

获取窗口的句柄:
i.find_element(By.LINK_TEXT,'hao123').click()
print(i.title) #输出结果:百度一下,你就知道

handle=i.current_window_handle #获取当前的窗口的句柄
print(handle) #输出结果:D181A487C2CE6D24707F3C2A523794D3

all_handle=i.window_handles #获取所有窗口的句柄,以列表的形式返回
print(all_handle)

切换窗口switch_to.window()是通过切换句柄实现的
i.switch_to.window(all_handle[-1]) #通过所有选择hao123的句柄
print(i.title) #输出结果:hao123_上网从这里开始

time. Sleep(4)
i.close()