自动化测试selenium
简单的自动化脚本
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_css_selector("#kw").send_keys("我在他乡挺好的") # 点位页面的元素,对元素进行操作
driver.find_element_by_css_selector("#su").click()
time.sleep(8)
driver.quit()
1.导入webdriver工具包
2.获得被控制浏览器的驱动,浏览器必须安装相应的浏览器驱动
3.通过元素的ID定位想要操作的元素,并且向元素输入相应的文本内容并进行点击操作
4.退出关闭窗口
- driver.quit()和driver.close()两者区别:close方法关闭当前的浏览器窗口,quit方法不仅关闭窗口,还好彻底的退出webdriver,释放与driverserver之间的连接,因此quit是更彻底的关闭,quit会更好的释放资源。
元素的定位
id定位
id是页面元素的属性,是最常用元素的定位方式。如果元素有id,全局唯一,可以直接定位元素。
driver.find_element_by_id("kw").send_keys("六一儿童节")
driver.find_element_by_id('su').click()
name定位
如果这个元素有name,并且元素的name命名在整个页面是唯一的,那么我们可以用name来定位元素。
driver.find_element_by_name('wd').send_keys("自动化测试")
driver.find_element_by_name('su').click()
class name定位
不一定可以定位元素
driver.find_element_by_class_name('bg s_ipt_wr new-pmd quickdelete-wrap').send_keys("自动化测试")
link text定位
link text定位适合可点击的链接
driver.find_element_by_link_text("新闻").click()
Partial link text定位
通过部分链接的内容去定位元素
driver.find_element_by_partial_link_text("新").click()
tag name定位
必须唯一才可定位,组成元素的tag
driver.find_element_by_tag_name("input").send_keys("自动化测试")
driver.find_element_by_tag_name('input').click()
xpath定位
一定可以定位到该元素,每一个元素的xpath都是唯一的。
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("自动化测试")
driver.find_element_by_xpath('//*[@id="su"]').click()
css定位
一定可以定位到元素
driver.find_element_by_css_selector('#kw').send_keys("自动化测试")
driver.find_element_by_css_selector('#su').click()
操作测试对象
- click 点击操作对象
- send_keys 给操作对象输入文本信息
- submit 提交表单
- clear 清除操作对象的内容
- text 获取操作对象的文本内容
鼠标点击与键盘输入
from selenium import webdriver
import time
# 获得浏览器驱动
driver = webdriver.Chrome()
# 打开需要访问的web页面
driver.get("https://www.baidu.com/")
driver.find_element_by_css_selector('#kw').send_keys("自动化测试")
driver.find_element_by_css_selector('#su').submit()
time.sleep(10)
# 清除浏览器的内容
driver.find_element_by_css_selector('#kw').clear()
time.sleep(10)
driver.find_element_by_css_selector("#kw").send_keys("手工测试")
driver.find_element_by_css_selector("#su").submit
driver.quit()
text获取元素文本
from selenium import webdriver
import time
# 获得浏览器驱动
driver = webdriver.Chrome()
# 打开需要访问的web页面
driver.get("https://www.baidu.com/")
text = driver.find_element_by_id("bottom_layer").text
print(text)
time.sleep(8)
driver.quit()
添加等待
- time.sleep() :固定等待
- driver.implicity_wait():智能等待
time.sleep(5)
driver.implicitly_wait(10)
打印信息
- 获得title:driver.title
- 获得URL:driver.current_url
- 打印url
from selenium import webdriver
import time
# 获得浏览器驱动
driver = webdriver.Firefox()
# 打开需要访问的web页面
driver.get("https://www.baidu.com/")
title = driver.title
print(title)
url = driver.current_url
print(url)
打印结果:
浏览器的操作
设置浏览器的宽和高
# 设置浏览器的长和宽
driver.set_window_size(400, 1000)
浏览器的最大化
# 浏览器是最大化
driver.maximize_window()
浏览器的前进和后退
# 浏览器后退
driver.back()
# 浏览器的前进
driver.forward()
控制浏览器的滚动条
# 浏览器滚动条的控制
js0 = "var q = document.documentElement.scrollTop=10000" # 最低端
driver.execute_script(js0)
time.sleep(5)
js1 = "var q=document.documentElement.scrollTop=0" # 最顶端
键盘事件
要使用键盘按键,必须引入keys包:from selenium.webdriver.common.keys import Keys
键盘按键用法:
通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
send_keys(Keys.SPACE) #空格键
send_keys(Keys.ESCAPE) #回退键(Esc)
- 登录禅道
driver.get("http://127.0.0.1:88/zentao/user-login-L3plbnRhby8=.html")
# 清除已有的登录
driver.find_element_by_id('account').clear()
driver.find_element_by_name("password").clear()
# 登录操作
driver.find_element_by_id('account').send_keys('admin')
# 使用tab键将焦点定位到用户名
# driver.find_element_by_id('account').send_key(Keys.TAB)
time.sleep(4)
driver.find_element_by_name('password').send_keys("Ww123456")
# 用enter键直接登录
driver.find_element_by_name('password').send_keys(Keys.ENTER)
time.sleep(4)
driver.quit()
键盘组合键用法:
send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C
)
send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
driver.find_element_by_id("kw").send_keys("六一儿童节")
driver.find_element_by_id('su').click()
# 用剪贴的方式clear掉文本框中的输入内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'X')
time.sleep(4)
driver.find_element_by_id('kw').send_keys('2022')
driver.find_element_by_id('su').click
time.sleep(6)
driver.quit()
鼠标事件
引入工具包:from selenium.webdriver import ActionChains
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element()移动
- 示例:
(一)双击
from selenium.webdriver import ActionChains
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("六一儿童节")
b = driver.find_element_by_id('su')
ActionChains(driver).double_click(b).perform()
(二)右击
from selenium.webdriver import ActionChains
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
b = driver.find_element_by_id('su')
ActionChains(driver).context_click(b).perform()