自动化测试selenium
Selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言。
1.定位元素的方式
from selenium import webdriver
import time
#获取被控制浏览器的驱动,Chrome
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 1.通过元素id定位,并向元素输入相应的内容
# driver.find_element_by_id("kw").send_keys("666")
# 2.通过元素name定义,但是要有唯一的name才可以
# driver.find_element_by_name("wd").send_keys("777")
# 3.通过class name定位
# driver.find_element_by_class_name("s_ipt").send_keys("888")
# 4.通过css进行定位:chrome的F12开发者模式中Element-右键-copy-copy selector来获取
# driver.find_element_by_css_selector("#kw").send_keys("999")
# 5.通过XPath进行定位:chrome的F12开发者模式中Element-右键-copy-copy xpath来获取
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("1010")
# 6.link test进行定位:页面上的文字链接,需要文字唯一且存在,不然会报错
# driver.find_element_by_link_text("图片").click()
# 7.Partial link text定位:通过部分链接定位
driver.find_element_by_partial_link_text("图片").click()
# 通过元素id定位到元素,并进行点击操作
# driver.find_element_by_id("su").click()
time.sleep(5)
# 退出并关闭窗口
driver.quit()
2.操作测试对象
from selenium import webdriver
import time
# 定位之和需要对对象进行操作
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 1.send_keys给操作对象输入文本信息
# driver.find_element_by_id("kw").send_keys("666")
# 2.click点击操作对象
# driver.find_element_by_id("su").click()
# 3.submit提交表单,达到与click一样的效果
# driver.find_element_by_id("su").submit()
# 4.text获取元素文本:输出了文本,但是因为浏览器的防御措施,倒置文本显示不出来
# data = driver.find_element_by_id("bottom_layer").text
# print(data)
# 5.clear去除操作对象的内容
driver.find_element_by_id("kw").send_keys("666")
driver.find_element_by_id("kw").clear() #去除了上面的666
driver.find_element_by_id("kw").send_keys("hhh")
driver.find_element_by_id("su").submit()
# 添加等待:sleep休眠
time.sleep(5)
driver.quit()
3.添加等待
from selenium import webdriver
import time
driver = webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("666")
driver.find_element_by_id("su").click()
# 1.固定等待:必须等待参数设定的时间
# time.sleep(3)
# 2.智能等待:最多等待参数设定的时间,但是不一定等够足够这个时间
driver.implicitly_wait(5)
driver.quit()
4.打印消息
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 打印
# 1.title打印页面:百度一下,你就知道
print(driver.title)
# 2.打印url:百度的网址
print(driver.current_url)
time.sleep(5)
driver.quit()
5.浏览器的操作
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 五:浏览器的操作
# 1.浏览器最大化:maximize_window()
# driver.maximize_window() #将浏览器以最大的形式展示出来
# time.sleep(2)
# driver.find_element_by_id("kw").send_keys("666")
# driver.find_element_by_id("su").click()
# 2.设置浏览器的宽,高:set_window_size(width, high)
# driver.set_window_size(100,2000) #设置浏览器的长与高
# 3.浏览器的前进,后退
#浏览器的前进
# browser.forward()
#浏览器的后退
# driver.back()
# driver.find_element_by_id("kw").send_keys("666")
# driver.back() #浏览器后退
# driver.forward() #浏览器前进
# driver.find_element_by_id("kw").send_keys("777")
# driver.find_element_by_id("su").click()
# 4.控制浏览器滚动条
# 浏览器滚动条的控制需要依靠js脚本
driver.find_element_by_id("kw").send_keys("666")
driver.find_element_by_id("su").click()
time.sleep(2)
# 将页面滚动条拖到底部
js = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(2)
# 将滚动条移动到页面的顶部
js = "var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
time.sleep(5)
driver.quit()
6.键盘事件
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #需要引入keys 包
import os,time
# 键盘组合键用法
# 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 = webdriver.Chrome()
driver.get("http://demo.zentao.net/user-login-Lw==.html")
time.sleep(3)
driver.maximize_window() # 浏览器全屏显示
driver.find_element_by_id("account").clear()
time.sleep(3)
driver.find_element_by_id("account").send_keys("demo")
time.sleep(3)
# tab 的定位相当于清除了密码框的默认提示信息,等同上面的clear()
driver.find_element_by_id("account").send_keys(Keys.TAB)
time.sleep(3)
# 通过定位密码框,enter(回车)来代替登陆按钮
driver.find_element_by_name("password").send_keys(Keys.ENTER)
'''
#也可定位登陆按钮,通过enter(回车)代替click()
driver.find_element_by_id("login").send_keys(Keys.ENTER)
'''
time.sleep(3)
driver.quit()
7.鼠标事件
- 下面这段代码有一定的问题,但是基本操作没有太大的问题
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get("http://news.baidu.com")
# 这里有些问题,需要解决
qqq =driver.find_element_by_xpath(".//*[@id='s_btn_wr']")
ActionChains(driver).context_click(qqq).perform() #右键
ActionChains(driver).double_click(qqq).perform() #双击
# 定位元素的原位置
element = driver.find_element_by_id("s_btn_wr")
# 定位元素要移动到的目标位置
target = driver.find_element_by_class_name("btn")
# 执行元素的移动操作
ActionChains(driver).drag_and_drop(element, target).perform()
8.定位一组元素
from selenium import webdriver
import time
import os
# 定位一组元素
driver = webdriver.Chrome()
# file_path = "file:///" + os.path.abspath('D:/Java_sprint/cs/selenium2html/checkbox.html')
file_path = "file:///D:/Java_sprint/cs/selenium2html/checkbox.html"
driver.get(file_path)
time.sleep(3)
driver.maximize_window()
# 勾选里面所有的checkbox
# driver.find_element_by_id("c1").click()
# # driver.find_element_by_id("c2").click()
# # driver.find_element_by_id("c3").click()
# 定位一组tag name 都为input的元素
inputs = driver.find_elements_by_tag_name('input')
for input in inputs :
if input.get_attribute('type') == 'checkbox':
input.click()
time.sleep(2)
driver.quit()
9.多层框架窗口定位
- 多层框架的操作
from selenium import webdriver
import time
import os
# 多层框架的操作
driver = webdriver.Chrome()
# url = "file:///" + os.path.abspath("C:\\课件\\我的课件\\测试\\selenium2/locateElement/selenium2html/frame.html")
url = "file:///D:/Java_sprint/cs/selenium2html/frame.html"
driver.get(url)
time.sleep(3)
driver.maximize_window()
# 从默认页面到 f1 框架页面
driver.switch_to.frame("f1")
driver.find_element_by_link_text("click").click()
# 回到默认页面
driver.switch_to.default_content()
# driver.switch_to_frame()
time.sleep(3)
driver.quit()
10.层级定位
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
# 层级定位
driver = webdriver.Chrome()
# url = "file:///"+os.path.abspath("C:\\课件\\我的课件\\测试\\selenium2/locateElement/selenium2html/level_locate.html")
url = "file:///D:/Java_sprint/cs/selenium2html/level_locate.html"
driver.get(url)
driver.maximize_window()
# 定位link1,点击
driver.find_element_by_link_text("Link1").click()
driver.implicitly_wait(10)
# 定位 Another Action
action = driver.find_element_by_link_text("Another action")
# 高亮显示Another action, 把鼠标移动到 Another action上面
ActionChains(driver).move_to_element(action).perform()
time.sleep(6)
driver.quit()
11.下拉框操作
from selenium import webdriver
import time
import os
# 下拉框操作
driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/drop_down.html"
driver.get(url)
driver.maximize_window()
time.sleep(2)
m = driver.find_element_by_id("ShippingMethod")
# 1.使用xpath进行定位
m.find_element_by_xpath('//*[@id="ShippingMethod"]/option[3]').click()
# 2.定位一组元素,用该元素的特殊属性进行查找
options = driver.find_elements_by_tag_name("option")
# for option in options:
# if option.get_attribute('value') == '9.03':
# option.click()
# 3.通过数组的方式进行查找
options[3].click()
time.sleep(3)
driver.quit()
12.alert、confifirm、prompt 的处理
alert点击确认按钮
- 获得弹框的操作句柄
- 调用accept方法关闭弹框
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/alert.html#"
driver.get(url)
driver.maximize_window()
time.sleep(3)
# 定位元素,点击,使得弹出框出现
driver.find_element_by_id("tooltip").click()
time.sleep(3)
# 定位弹出框/获得弹出框的操作句柄
alert = driver.switch_to.alert
time.sleep(3)
# 关闭alert
alert.accept()
time.sleep(5)
driver.quit()
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/send.html"
driver.get(url)
driver.maximize_window()
time.sleep(3)
driver.find_element_by_tag_name("input").click()
time.sleep(3)
# 先获得弹出框的操作句柄
alert = driver.switch_to.alert
# 向alert框输入消息
alert.send_keys("20岁")
time.sleep(4)
# 关闭信息展示弹框
alert.accept()
time.sleep(6)
driver.quit()
12.DIV对话框的处理
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/modal.html"
driver.get(url)
driver.maximize_window()
time.sleep(3)
# 点击click 出现弹框
driver.find_element_by_link_text("Click").click()
time.sleep(3)
# 点击div 框框里面的click me,让弹出框内容发生变化
div1 = driver.find_element_by_class_name("modal-body")
div1.find_element_by_link_text("click me").click()
time.sleep(4)
# 定位div 在定位具体的button
div2 = driver.find_element_by_class_name("modal-footer")
# 使用数组的方式定义
buttons = driver.find_elements_by_tag_name("button")
buttons[0].click()
time.sleep(6)
driver.quit()
13.上传文件操作
from selenium import webdriver
import time
import os
# 上传文件
driver = webdriver.Chrome()
url = "file:///D:/Java_sprint/cs/selenium2html/upload.html"
driver.get(url)
driver.maximize_window()
time.sleep(3)
# 上传文件,send_keys-文件的绝对路径
driver.find_element_by_name("file").send_keys("D:/Java_sprint/cs/selenium2html/upload.html")
time.sleep(6)
driver.quit()