UI自动化测试
适用范围:
1.需要回归测试的项目
2.需求变动不频繁,稳定的模块
3.项目周期长的项目
**目的:**提高效率
Selenium
四个导航:
-
get() 打开网页地址地址
-
back() 后退
-
forward() 前进
-
refresh() 刷新
from selenium.webdriver import Chrome
import time
web=Chrome()
web.get('https://www.baidu.com')
time.sleep(3)
web.refresh()
time.sleep(6)
三个页面属性:
-
title 页面的标题
-
current_url 最近打开的网址
-
page_source 页面的源码
web=Chrome()
web.get('https://www.baidu.com')
print(web.title)
print(web.current_url)
print(web.page_source)
两个关闭方法:
-
close():关闭超链接新打开的窗口
-
quit():关闭浏览器所有窗口
driver.get("https://www.baidu.com")
driver.find_element(By.LINK_TEXT,"新闻").click()
time.sleep(3)
driver.close()
一组管理窗口的方法
-
maximize_window
-
get_window_size
-
set_window_size
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
print(driver.get_window_size())
driver.set_window_size(1000,800)
time.sleep(4)
driver.close()
截图:
动态获取 get_screenshot_as_file(‘{}.png’.format(time.strftime(‘%Y%m%d-%H%M%S’)))
driver.get_screenshot_as_file("D:\\{}.png".format(time.strftime('%Y%m%d-%H%M%S')))
元素定位
id,name,class_name,tag_name,link_text,partial_link_text,Xpath,CSS
id:唯一的
通过id搜索辽宁大学
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("辽宁大学")
name:
可以重复,使用前进行检查
driver.find_element_by_name("wd").send_keys("辽宁大学")
class_name:
重复概率非常高
driver.find_element_by_class_name("s_ipt").send_keys("辽宁大学")
tag_name:
定位标签,单个元素不提倡使用,使用时标签需要首次出现
link_text:
通过超链接打开关于百度
driver.find_element_by_link_text("关于百度").click()
partial_link_text:
超链接里面部分字定位,适用于文本信息过长取部分时。
driver.find_element_by_partial_link_text("关于").click()
一组元素的定位:
打开新闻
els=driver.find_elements_by_tag_name('a')
for el in els:
print(el.text)
els[3].click()
Xpath:
路径定位:
绝对路径打开新闻
driver.find_element_by_xpath("/html/body/div/div/div[3]/a[1]").click()
相对路径
driver.find_element_by_xpath("//div/div/div[3]/a[1]").click()
属性定位:
搜索辽宁大学
driver.find_element_by_xpath("//input[@id='kw']").send_keys("辽宁大学")
属性与逻辑定位:
driver.find_element_by_xpath("//input[@id='kw'and@name='wd']").send_keys("辽宁大学")
文本定位:
driver.find_element_by_xpath("//a[text()='新闻']").click()
CSS:
id:
driver.find_element_by_css_selector("#kw").send_keys("辽宁大学")
属性:
driver.find_element_by_css_selector("[type='submit']").click()
class:
driver.find_element_by_css_selector(".s_ipt").send_keys("辽宁大学")
.代替类名
元素操作
清除.clear()
先搜索辽宁大学之后搜索辽宁科技大学
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://baidu.com")
driver.find_element_by_css_selector(".s_ipt").send_keys("辽宁大学")
time.sleep(2)
driver.find_element_by_css_selector(".s_ipt").clear()
driver.find_element_by_css_selector(".s_ipt").send_keys("辽宁科技大学")
点击.click()
传值.send_keys(“”)
获取元素
为了断言
搜索框大小:
b=driver.find_element_by_css_selector(".s_ipt").size
print(b)
超链接的文本内容:
.text
链接地址:
.get_attribute()
标签是否可见:
.is_displayed()
按钮是否可用:
.is_enabled()
复选框是否选中:
.is_selected()
鼠标操作
悬停
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://baidu.com")
action=ActionChains(driver)
move=driver.find_element_by_class_name("aging-entry-inner")
action.move_to_element(move).perform()
双击
double=driver.find_element_by_xpath("//a[text()='新闻']")
action.double_click(double).perform()
拖动
-
div1=driver.find_element_by_id("div1") div2=driver.find_element_by_id("div2") action.click_and_hold(div1).move_to_element(div2).release().perform()
-
action.drag_and_drop(div1,div2).perform()
-
print(div1.location) print(div2.location) action.drag_and_drop_by_offset(div1,xoffset=162,yoffset=0).perform()
{‘x’: 8, ‘y’: 8}
{‘x’: 170, ‘y’: 8}
键盘操作
搜索辽宁大学按enter然后全选删除
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://baidu.com")
driver.find_element_by_id("kw").send_keys("辽宁大学")
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.BACKSPACE)
隐式等待Implicitly_Wait()
找到定位元素则不等待。
显示等待WebDriverWait()
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://baidu.com")
WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("kw")).send_keys("辽宁大学")
Alert(弹窗)
alert处理
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("file:///D:/demo.html")
driver.find_element_by_class_name("alert").click()
time.sleep(2)
driver.switch_to_alert().accept() *#* *点击确定按钮
*driver.find_element_by_class_name("confirm").click()
time.sleep(2)
driver.switch_to_alert().dismiss() *#* *点击取消按钮
*driver.find_element_by_class_name("prompt").click()
time.sleep(2)
driver.switch_to_alert().send_keys("hello world") *#* *输入内容
*driver.find_element_by_class_name("order-confirm").click()
time.sleep(10)
print(driver.switch_to_alert().text) *#* *获取弹窗文本*
多窗口处理
利用driver.window_handles获取每个窗口的句柄
driver.switch_to_window(句柄)切换窗口
driver.switch_to_frame(名,标签,元素定位)
driver.switch_to.default_content()回到默认首页
验证码处理
- 开发去掉验证码
- 验证码设置成一样的
- 验证码识别技术
- 记录cookie跳过登陆
cookie注入:
driver.add_cookie()
driver.add_cookie({'name':'uname','value':'zcmg'})
driver.add_cookie({'name':'user_id','value':'2593'})
time.sleep(2)
driver.refresh()