软件测试 自动化测试selenium篇(二)

您所在的位置:网站首页 滚动条测试用例 软件测试 自动化测试selenium篇(二)

软件测试 自动化测试selenium篇(二)

2023-06-10 13:27| 来源: 网络整理| 查看: 265

目录

操作测试对象

添加等待

打印信息

浏览器操作

浏览器前进

浏览器滚动条操作

定位一组元素

多层框架/窗口定位

层级定位

下拉框处理

alert、confifirm、prompt 的处理

操作测试对象

前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个元素进行操作。是鼠标点击还是键盘输入,或者清除元素的内容,或者提交表单等。这个取决于定位元素需要进行的下一步操作。 webdriver 中比较常用的操作对象的方法有下面几个: click 点击对象 send_keys 在对象上模拟按键输入 clear 清除对象输入的文本内容 submit 提交 getText 用于获取元素的文本信息\getAttrubute 获取属性值

submit 和 click之间有什么区别?

submit操作测试对象,必须将对应的操作对象/点击对象放到form标签中

而click页面上的所有节点都可以点击

添加等待 强制等待隐式等待 通过添加implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30)的用法比time.sleep()更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。 selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait) time_to_wait 设置的等待时长。 隐式地等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长 用法: browser.implicitly_wait(30) 示例: # coding = utf-8 from selenium import webdriver import time # 调入 time 函数 browser = webdriver.Chrome() browser.get("http://www.baidu.com") browser.implicitly_wait(30) # 隐式等待 30 秒 browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() browser.quit() 显示等待 打印信息

获取url(getcurrenturl)

#coding = utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') print(driver.current_url) # 打印 url browser.maximize_window()

获取title(getTitle)

#coding = utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') print(driver.title) # 把页面 title 打印出来 浏览器操作

最大化(max)

browser.maximize_window() #coding=utf-8 from selenium import webdriver import time browser = webdriver.Chrome() browser.get("http://www.baidu.com") print " 浏览器最大化 " browser.maximize_window() # 将浏览器最大化显示 time.sleep(2) browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() time.sleep(3) browser.quit()

设置大小(setSize)

browser.set_window_size(width, high) #coding=utf-8 from selenium import webdriver import time browser = webdriver.Chrome() browser.get("http://www.baidu.com") time.sleep(2) # 参数数字为像素点 print(" 设置浏览器宽 480 、高 800 显示 ") browser.set_window_size(480, 800) time.sleep(3) browser.quit()

全屏(fullScreen)

浏览器前进

navagite.windows.forward

navagite.windows.back..

# 浏览器的前进 browser.forward() # 浏览器的后退 browser.back() #coding=utf-8 from selenium import webdriver import time browser = webdriver.Chrome() # 访问百度首页 first_url= 'http://www.baidu.com' print("now access %s" %(first_url)) browser.get(first_url) time.sleep(2) # 访问新闻页面 second_url='http://news.baidu.com' print("now access %s" %(second_url)) browser.get(second_url) time.sleep(2) # 返回(后退)到百度首页 print("back to %s "%(first_url)) browser.back() time.sleep(1) # 前进到新闻页 print("forward to %s"%(second_url)) browser.forward() time.sleep(2) browser.quit() 浏览器滚动条操作 # 将浏览器滚动条滑到最顶端 document.documentElement.scrollTop=0 # 将浏览器滚动条滑到最底端 document.documentElement.scrollTop=10000 # 将浏览器滚动条滑到最底端, 示例 js="var q=document.documentElement.scrollTop=10000" driver.execute_script(js) 其中, execute_script(script, *args) ,在当前窗口 / 框架同步执行 javaScript

 

#coding=utf-8 from selenium import webdriver import time # 访问百度 driver=webdriver.Chrome() driver.get("http://www.baidu.com") # 搜索 driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() time.sleep(3) # 将页面滚动条拖到底部 js="var q=document.documentElement.scrollTop=10000" driver.execute_script(js) time.sleep(3) # 将滚动条移动到页面的顶部 js="var q=document.documentElement.scrollTop=0" driver.execute_script(js) time.sleep(3) driver.quit() 定位一组元素 webdriver 可以很方便的使用 fifindElement 方法来定位某个特定的对象,不过有时候我们却需要定位一 组对象,这时候就需要使用fifindElements 方法。 定位一组对象一般用于以下场景: 批量操作对象,比如将页面上所有的checkbox 都勾上 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的 checkbox,然后选择最后一个 用以下 HTML 示例说明: Checkbox checkbox checkbox1 checkbox2 checkbox3 radio radio

 用浏览器打开这个页面我们看到三个复选框和两个单选框。下面我们就来定位这三个复选框。

#coding=utf-8 from selenium import webdriver import time import os dr = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('checkbox.html') dr.get(file_path) # 选择页面上所有的 input ,然后从中过滤出所有的 checkbox 并勾选之 inputs = dr.find_elements_by_tag_name('input') for input in inputs: if input.get_attribute('type') == 'checkbox': input.click() time.sleep(2) dr.quit()

 get_attribute:获得属性值。

多层框架/窗口定位

对于一个 web 应用,经常会出现框架( frame ) 或窗口( window )的应用,这也就给我们的定位带来了一定的困难。 定位一个frame :switch_to.frame(name_or_id_or_frame_element) 定位一个窗口window:switch_to.window(name_or_id_or_frame_element)

 用以下HTML示例说明:

frame $(document).ready(function(){ }); frame 层级定位 有时候我们需要定位的元素没有直接在页面展示,而是需要对页面的元素经过一系列操作之后才展示出来,这个时候我们就需要一层层去定位. 用以下 HTML 示例说明: Level Locate Level locate Link1 Action Another action Something else here Separated link Link2 Action Another action Something else here Separated link Link2 Action Another action Something else here Separated link

 定位思路:

具体思路是:先点击显示出 1 个下拉菜单,然后再定位到该下拉菜单所在的 ul ,再定位这个 ul 下的某个具体的link 。在这里,我们定位第 1 个下拉菜单中的 Action 这个选项。 #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() #在父亲元件下找到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() 下拉框处理 下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框对下拉框进行操作后,再定位到下拉框内里的选项。 用以下 HTML 示例说明: UPS Next Day Air ==> $12.51 UPS Next Day Air Saver ==> $11.61 UPS 3 Day Select ==> $10.69 UPS 2nd Day Air ==> $9.03 UPS Ground ==> $8.34 USPS Priority Mail Insured ==> $9.25 USPS Priority Mail ==> $7.45 USPS First Class ==> $3.20 现在我们来通过脚本选择下拉列表里的 $10.69 #coding=utf-8 from selenium import webdriver import os,time driver= webdriver.Chrome() file_path = 'file:///' + os.path.abspath('drop_down.html') driver.get(file_path) time.sleep(2) #先定位到下拉框 m=driver.find_element_by_id("ShippingMethod") #再点击下拉框下的选项 m.find_element_by_xpath("//option[@value='10.69']").click() time.sleep(3) driver.quit() 这里可能和之前的操作有所不同,首先要定位到下拉框的元素,然后选择下拉列表中的选项进行点击操作。 alert、confifirm、prompt 的处理 text 返回alert/confifirm/prompt 中的文字信息 accept 点击确认按钮 dismiss 点击取消按钮,如果有的话 send_keys 输入值,如果alert 没有对话框就不能用了,不然会报错 注意: switch_to.alert() 只能处理原生的 alert 用以下 HTML 示例说明: alert $(document).ready(function(){ $('#tooltip').tooltip({"placement": "right"}); $('#tooltip').click(function(){ alert('watir-webdriver better than selenium-webdriver') }); }); alert hover to see tooltip # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep import os dr = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('alert.html') dr.get(file_path) # 点击链接弹出alert dr.find_element_by_id('tooltip').click() sleep(2) alert = dr.switch_to.alert() alert.accept() sleep(2) dr.quit() #接受警告信息 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")



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3