自动化测试selenium(2)–webdriver常用API
简单脚本的构成
1、在脚本头部导入需要的包;
2、获取浏览器的驱动;
3、使用浏览器驱动对需要测试的文本系统进行操作;
4、测试完毕后关闭浏览器。
webdriver常用的API:
1、元素的定位:对象的定位是自动化测试的核心,操作一个对象的前提首先应识别此对象。
webdriver提供了一系列的对象定位方法。(不管使用哪种方式,必须保证页面上该属性的唯一性)
- id :全局唯一,一定可以唯一定位到一个元素
- name:不一定全局唯一,有可能定位不到
- class name:不一定全局唯一,有可能定位不到
- link text:不一定全局唯一,有可能定位不到
- partial link text:不一定全局唯一,有可能定位不到
- tag name:不一定全局唯一,有可能定位不到
- xpath:一定可以定位到一个元素
- css selector:样式
2、操作测试对象
webdriver中提供了一下几种常用的操作对象方法
- click:点击对象
- send_keys:在对象上模拟按键输入
- clear:清除对象的内容
- submit:提交
- text:用于获取元素的文本信息
3、添加等待
- 固定等待:
time.sleep(5)
------只能选择一个固定的时间的等待 - 智能等待:
browser.implicitly_wait(30)
--------在一个时间范围内智能的等待,超出时间范围会抛异常
4、打印信息
打印title及URL:
print driver.title # 把页面title 打印出来
print driver.current_url #打印url
5、浏览器的操作
浏览器最大化:driver.maximize_window()
设置浏览器宽高:driver.set_window_size(480,800)
操作浏览器的前进、后退:driver.forward() driver.back()
控制浏览器滚动条:
- 将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
- 将滚动条移动到页面的顶部
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
6、键盘事件
from selenium.webdriver.common.keys import Keys #需要引入keys 包
键盘按键用法:
通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
#tab 的定位相当于清除了密码框的默认提示信息,等同clear()
driver.find_element_by_id("account").send_keys(Keys.TAB)
#也可定位登陆按钮,通过enter(回车)代替click()
driver.find_element_by_id("login").send_keys(Keys.ENTER)
键盘组合键用法
#ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
7、鼠标事件
from selenium.webdriver.common.action_chains import ActionChains 需要引入ActionChains 包
ActionChains 类
context_click() #右击
double_click() #双击
drag_and_drop() #拖动
move_to_element() #移动
ActionChains(driver):生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。
move_to_element(menu):移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素
perform():执行所有存储的行为
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
driver.find_element_by_id("kw").send_keys("杨紫")
driver.find_element_by_id("su").click()
#aaa = driver.find_element_by_xpath("//*[@id='s-top-left']/a[1]")
#ActionChains(driver).context_click(aaa).perform() #右键
#time.sleep(3)
#ActionChains(driver).double_click(aaa).perform() #双击
time.sleep(6)
yule = driver.find_element_by_link_text("那英杨紫回应不和")
ActionChains(driver).move_to_element(yule).perform()
time.sleep(6)
driver.quit()
8、定位一组元素
findElements
使用场景:批量操作对象。如将页面上的所有checkbox都勾选上;
先获取一组对象,再在这一组对象中过滤出需要具体定位的一些对象。如定位出页面上所有的checkbox,勾选其 中一个。
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//checkbox.html")
driver.get(file_path)
inputs = driver.find_elements_by_tag_name("input")
for input in inputs:
if input.get_attribute("type") == "checkbox":
input.click()
time.sleep(3)
driver.quit()
9、多层框架/窗口定位
-
switch_to.frame() #多层框架定位
-
switch_to.window() #窗口定位
-
driver.switch_to.default_content() #从frame中嵌入的页面里跳出,跳回到最外面的原始页面中。
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//frame.html")
driver.get(file_path)
driver.switch_to.frame("f1")
driver.switch_to.frame("f2")
driver.find_element_by_id("kw").send_keys("天使")
driver.find_element_by_id("su").click()
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()
file_path = "file:///"+"D://Users//Administrator//html//level_locate.html"
driver.get(file_path)
driver.maximize_window()
driver.find_element_by_link_text("Link1").click()
ele = driver.find_element_by_id("dropdown1").find_element_by_link_text("Another action")
ActionChains(driver).move_to_element(ele).perform()
time.sleep(3)
driver.quit()
11、下拉框的定位
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//drop_down.html")
driver.get(file_path)
driver.find_element_by_id("ShippingMethod")
options = driver.find_elements_by_tag_name("option")
time.sleep(3)
options[2].click()
for option in options:
if option.get_attribute('value') == '9.03':
option.click()
time.sleep(3)
driver.quit()
12、alert、confirm、prompt 的处理
-
text 返回alert/confirm/prompt 中的文字信息
-
accept ()点击确认按钮
-
dismiss() 点击取消按钮,如果有的话
-
send_keys ()在弹出框中输入值,这个alert\confirm 没有对话框就不能用了,不然会报错
-
switch_to.alert #得到操作弹框的句柄
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//alert.html")
driver.get(file_path)
driver.find_element_by_id("tooltip").click()
# 得到操作弹框的操作句柄,关闭弹框
alert = driver.switch_to.alert
alert.accept()
time.sleep(3)
driver.quit()
在alert中输入文本:
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//send.html")
driver.get(file_path)
driver.find_element_by_tag_name("input").click()
time.sleep(3)
alert = driver.switch_to.alert
alert.send_keys("xxx")
# alert.accept() 点击确定
alert.dismiss() #点击取消
time.sleep(3)
driver.quit()
13、div对话框处理
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//modal.html")
driver.get(file_path)
# 打开对话框
driver.find_element_by_link_text("Click").click()
# 定位div1
div1 = driver.find_element_by_class_name("modal-body")
div1.find_element_by_id("click").click()
time.sleep(3)
# 定位div2
div2 = driver.find_element_by_class_name("modal-footer")
div2.find_element_by_class_name("btn").click()
# 定位button
buttons = div2.find_elements_by_tag_name("button")
buttons[0].click()
time.sleep(3)
driver.quit()
14、上传文件操作
定位上传按钮,通过send_keys 添加本地文件路径。
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file_path = "file:///"+os.path.abspath("D://Users//Administrator//html//upload.html")
driver.get(file_path)
time.sleep(3)
# 定位上传按钮,添加本地文件路径
driver.find_element_by_tag_name("input").send_keys("C:\\Users\\Administrator\\Desktop\\新建文件夹\\优盘\\新建文件夹\\截图\\a.PNG")
time.sleep(3)
driver.quit()