UI自动化1
1、UI自动化测试环境搭建
UI自动化测试的技术栈: 1、编程语言(oop) 2、单元测试框架UnitTest 3、数据驱动(测试的数据分离到文件中) 4、参数化 5、selenium WEB测试框架 6、页面对象设计模式 7、持续集成
自动化测试:自动化测试就是通过代码或者是工具模拟人的行为来进行对WEB(APP)来进行操作。
selenium:是WEB的UI测试框架,可以和主流的编程语言(Python,Java,Net,PHP,JavaScript)整合来测试WEB系统,同时也是支持主流的浏览器(IE,Firefox,Chrome)。Selenium通过driver的驱动方式来操作浏览器,对浏览器进行各种交互式的验证(点击,输入,下拉框选项。。。)
Selenium环境搭建步骤: 1、按照selenium :pip install selenium 2、安装Chrome浏览器 3、下载driver的驱动,并且把数据配置到path的环境变量 A、driver的驱动要与浏览器的版本完全匹配(99%) B、把driver的应用程序放在python的安装目录下 https://registry.npmmirror.com/binary.html?path=chromedriver/
2、UI自动化测试概述
webdriver之所以能够操作浏览器,是因为他首先需要定位到被操作的元素属性,然后就可以对浏览器做各种操作。
3、元素定位分类
在selenium框架中,操作元素定位使用的类是By,里面方法有8种, 那么也就是说,定位页面的元素属性方法有8种,分别是: ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
3.1单个元素定位
a标签下的都是超链接
input标签下的都是输入框
3.1.1一般定位元素属性
3.1.1.1 ID
from selenium import webdriver
import time as t
#实例化webdriver,并且指定要测试的浏览器
driver=webdriver.Chrome()
#打开浏览器导航到百度
driver.get('https://www.baidu.com')
#send keys是输入的方法(通过ID属性定位到百度的搜索输入框,并且输入搜索的关键字)
driver.find_element_by_id('kw').send_keys('UI自动化')
t.sleep(3)
#退出浏览器
driver.quit()
'''name'''
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_name('wd').send_keys('UI自动化')
t.sleep(3)
driver.quit()
效果同上
3.1.1.3 class_name
'''class_name'''
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_class_name('s_ipt').send_keys('UI自动化')
t.sleep(3)
driver.quit()
效果同上
3.1.2超链接元素定位属性
超链接使用的前提是他的地址必须完整。
3.1.2.1 LINK_TEXT(精确查找)
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_link_text('视频').click()
t.sleep(3)
driver.quit()
3.1.2.2 PARTIAL_LINK_TEXT(模糊查询)
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_partial_link_text('频').click() #模糊查询
t.sleep(3)
driver.quit()
效果同上
3.1.3追加定位元素属性
当一个元素使用ID,name,class_name定位不到的时候, 那么这个时候使用css(基于样式)和xpath(基于路径)
3.1.3.1 XPath
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('UI自动化')
t.sleep(3)
driver.quit()
3.1.3.2 full_XPath
在数据复制时选择full XPath,在ID为动态参数的情况下使用,具体代码同XPath一样。
XPath与full XPath(动态ID情况下使用)
3.1.3.3 css
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_css_selector('#kw').send_keys('UI自动化')
t.sleep(3)
driver.quit()
效果同上
3.1.4 tag_name元素定位方法
'''tag_name'''
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
inputs=driver.find_elements_by_tag_name('input')
inputs[7].send_keys('UI自动化')
t.sleep(3)
driver.quit()
效果同上
3.2多元素定位
多个元素定位,指的是元素的属性都一致,返回的是列表,可以根据列表的索引来定位元素属性。不管是单个元素定位还是多个元素定位,目前都有8种。
driver=webdriver.Chrome()
driver.get('file:///F:/TestDev/code/testdev/Python%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index(2).html')
listID=driver.find_elements_by_id('login')
# print(type(listID))
# for item in listID:
# print(item)
#输入账户
listID[0].send_keys('qwe')
t.sleep(3)
#输入密码
listID[1].send_keys('123')
t.sleep(3)
#点击登录
listID[2].click()
t.sleep(2)
driver.quit()
3.3多窗口解决
多窗口的处理的逻辑: 1、先获取当前窗口的句柄 2、点击后打开新的窗口 3、获取所有的窗口句柄 4、针对所有的窗口句柄循环,循环内部判断,如果不是当前的窗口,那么就是新的 窗口,那么就需要切换到新的窗口
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
driver=webdriver.Chrome()
driver.get('https://mail.sina.com.cn/')
nowhandler=driver.current_window_handle
t.sleep(3)
driver.find_element(By.LINK_TEXT,'注册').click()
t.sleep(3)
allhandlers=driver.window_handles
for handler in allhandlers:
if handler !=nowhandler:
driver.switch_to.window(handler)
driver.find_element(By.NAME,'email').send_keys('sdadq')
t.sleep(3)
driver.close()
t.sleep(2)
driver.switch_to.window(nowhandler)
driver.find_element(By.ID,'freename').send_keys('xcqwdq')
t.sleep(3)
driver.quit()
3.4 iframe框架定位
进入iframe框架三种方式: 1.ID 2.name 3.索引
3.4.1通过ID和name
driver=webdriver.Chrome()
driver.get('https://mail.qq.com/')
# driver.switch_to.frame('login_frame')
driver.switch_to.frame(1)
driver.find_element(By.NAME,'u').send_keys('1069724225')
t.sleep(3)
driver.quit()
3.4.2通过索引
driver=webdriver.Chrome()
driver.get('https://www.taobao.com/')
driver.find_element(By.LINK_TEXT,'亲,请登录').click()
t.sleep(3)
driver.find_element(By.NAME,'fm-login-id').send_keys('admin')
t.sleep(3)
driver.quit()

4、Webdriver类的常用方法
4.1获取当前测试地址
'''获取测试地址'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.current_url)
4.2获取源代码
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.page_source)
4.3获取标题
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.title)
5、页面前进和后退
'''前进和后退'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com') #首先打开baidu
t.sleep(3)
driver.get('http://www.bing.com') #3秒后跳转到bing
t.sleep(3)
driver.back() #再三秒后返回到baidu
print(driver.current_url) #输出地址
driver.forward() #再次前进到bing
print(driver.current_url) #输出地址
t.sleep(3)
driver.quit()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架