自动化测试——webdriver中常见的API

  1. 一个简单脚本
# coding = utf-8 # 可加可不加,防止乱码
from selenium import webdriver # 要想使用selenium 的webdriver 里的函数,首先把包导进来
import time # 导入时间
browser = webdriver.Firefox() # 启动浏览器,浏览器可以随便换,但是前提是得把相应的驱动配置好了
time.sleep(3) # 停3秒
browser.get("http://www.baidu.com") # 得到url,进入网页
time.sleep(3)
browser.find_element_by_id("kw").send_keys("selenium") #一个元素有若干属性id 、name等,这里利用id属性定位到百度输入框,send_keys表示在输入框里输入selenium。
time.sleep(3)
browser.find_element_by_id("su").click() # 利用id定位到搜索的按钮 ,click()表示点一下按钮
browser.quit() # 退出并关闭窗口的每一个相关的驱动程序
  1. 元素的定位
    条件:元素拥有该属性,并且该属性全局唯一
    webdriver 提供了一系列的对象定位方法,常用的有以下几种:id、name、class name、link text、partial link text、tag name、xpath、css selector
    具体操作见https://github.com/Li-wenyan/learn-java/tree/master/AutomatedTesting
  2. 操作测试对象
    定位只是第一步,定位之后需要对这个原素进行操作。鼠标点击呢还是键盘输入,这要取决于定位的是按钮还输入框。
    一般来说,webdriver 中比较常用的操作对象的方法有下面几个:
    click 点击对象
    send_keys 在对象上模拟按键输入
    clear 清除对象的内容,如果可以的话
    submit 清除对象的内容,如果可以的话
    text 用于获取元素的文本信息
  3. 添加等待
    固定等待:time.sleep(5),设置几秒就等待几秒
    只能等待:implicitly_wait(5),等待的时间为0~5秒
  4. 打印信息
    title(打印的是上一个页面的),url
  5. 浏览器的操作
    浏览器最大化:maximize_window()
    浏览器最小化:minimize_window()
    设置浏览器宽、高:set_window_size(480, 800) # 宽480、高800
    操作浏览器的前进、后退:forward(),back()
    控制浏览器滚动条:
    js=“var q=document.documentElement.scrollTop=10000” # 10000表示拖到底部,0表示拖到顶部
    driver.execute_script(js)
  6. 键盘事件
    (1)键盘按键用法
    要想调用键盘按键操作需要引入keys 包:
    from selenium.webdriver.common.keys import Keys
    通过send_keys()调用按键:
    send_keys(Keys.TAB) # TAB
    send_keys(Keys.ENTER) # 回车
    (2)键盘组合键用法
    send_keys(Keys.CONTROL,‘a’) # 等于ctr+a 全选
    send_keys(Keys.CONTROL,‘x’) # 等于ctr+x 剪切
  7. 鼠标事件
    ActionChains 类
    context_click() 右击
    double_click() 双击
    drag_and_drop() 拖动
    move_to_element() 移动
    ActionChains(driver)生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为,例如:
#coding=utf-8
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()
  1. 定位一组元素
    webdriver 可以很方便的使用findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用findElements 方法
    定位一组对象一般用于以下场景:
    批量操作对象,比如将页面上所有的checkbox 都勾上;
    先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个
inputs = dr.find_elements_by_tag_name('input')
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
  1. 多层框架/窗口定位
    有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame 中,seelnium webdriver 提供了一个switch_to.frame 方法,可以很轻松的来解决这个问题。
    frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此才需要用switch_to.frame方法去获取frame中嵌入的页面,对那个页面里的元素进行定位。
    switch_to.default_content:从frame中嵌入的页面里跳出,跳回到最外面的原始页面中
    有可能嵌套的不是框架,而是窗口,还有真对窗口的方法:switch_to.window,用法与switch_to.frame 相同
  2. 层级定位
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
import os
dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('level_locate.html')
dr.get(file_path)
#点击Link1链接(弹出下拉列表)
dr.find_element_by_link_text('Link1').click()
#找到id 为dropdown1的父元素
#WebDriverWait(dr, 10), 10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。
#is_displayed(), 该元素是否用户可以见
WebDriverWait(dr,10).until(lambda the_driver:
the_driver.find_element_by_id('dropdown1').is_displayed())
#在父亲元件下找到link 为Action 的子元素
menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠标定位到子元素上
webdriver.ActionChains(dr).move_to_element(menu).perform()
time.sleep(2)
dr.quit()
  1. 下拉框处理
    对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项
  2. alert、confirm、prompt 的处理
    text 返回alert/confirm/prompt 中的文字信息
    accept 点击确认按钮
    dismiss 点击取消按钮,如果有的话
    send_keys 输入值,这个alert\confirm 没有对话框就不能用了,不然会报错
#接受警告信息
alert = dr.switch_to.alert()
alert.accept()
#得到文本信息打印
alert = dr.switch_to.alert()
print alert.text
#取消对话框(如果有的话)
alert = dr.switch_to.alert()
alert.dismiss()
#输入值
alert = dr.switch_to.alert()
alert.send_keys("hello word")
  1. DIV对话框的处理
  2. 上传文件操作
    文件上传操作也比较常见功能之一,上传功能没有用到新有方法或函数,关键是思路。
    上传过程一般要打开一个本地窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地窗口添加上传文件。只要定位上传按钮,通过send_keys 添加本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在

详见:https://github.com/Li-wenyan/learn-java/tree/master/AutomatedTesting

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值