上一篇
自动化工具下载 提取码:1234
自动化测试适用条件
需求变动不频繁、项目周期足够长、自动化测试脚本可重复使用
测试工具
禅道:
项目管理工具,可以管理整个软件开发的生命周期。 对于测试人员:管理测试用例,管理软件测试过程中产生的BUG,测试结果统计和分析,生成测试报告
selenium
下载步骤
python安装 pycharm+配置Python解释器 selenium下载
自动化测试:机器按照一定的预设的条件下去运行,进行软件测试活动自动 其他化测试工具:QTP,RobortFramework ,soupui postman, jmeter loadrunner, appium UI界面的自动化测试﹐黑盒测试
selenium的特点
轻量级,安装方便免费 支持多语言,Java JavaScript C#ruby Python 支持多平台Mac windows 支持多浏览器Chrome Firefox edge IE Opera Safari(苹果)(有利于支持兼容性测试) 支持分布式测试selenium Grid
UI自动化测试 vs接口自动化测试
UI自动化测试: (1)用例维护量大 (2)UI自动化测试在项目后期进行 (3)适用于界面稳定的项目 接口自动化测试 (1)用例维护量相对少 (2)在接口开发完之后就可以做(提前介入)(3)适合于接口稳定的项目 接口自动化测试投入产出比(效率)高于Ul界面层的自动化测试(测试金字塔) 自动化适用的对象 周期比较长,项目比较稳定,需求不频繁变动的项目,产品型的项目
selenium2:selenium1+webdriver原理
webdriver下载地址要和chrome版本最接近,并将它放在你的程序文件夹中
查看chrome版本
Python语言来写自动化测试脚本
Python解释型脚本语言,简单,易学,很多公司自动化测试都用
代码示例
1.
from selenium import webdriver
driver =webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.title)
driver.quit()
2.
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("狄仁杰")
driver.find_element_by_id("su").click()
time.sleep(6)
driver.quit()
元素定位
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_name("wd").send_keys("selenium")
browser.find_element_by_tag_name("input").send_keys("selenium")
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
browser.find_element_by_css_selector("#kw").send_keys("selenium")
browser.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
link text定位
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_link_text("hao123").click()
browser.quit()
Partial link text 定位
通过部分链接定位,拿上面的例子,我可以只用链接的一部分文字进行匹配:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_partial_link_text("hao").click()
browser.quit()
操作元素
例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/?tn=40020637_6_oem_dg")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("csdn")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.find_element_by_id("kw").clear()
time.sleep(2)
driver.find_element_by_id("kw").send_keys("河南")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()
获取文本
text = driver.find_element_by_class_name("title-content-title").text
print(text)
隐式等待
在有限的时间里等待查看目标代码是否完成,如果在有限的时间里没有完成就抛出异常
driver.find_element_by_id("kw").send_keys("河南")
driver.find_element_by_id("su").click()
driver.implicitly_wait(8)
driver.find_element_by_link_text("河南暴雨救援电话").click()
打印信息
print(driver.title)
print(driver.current_url)
设置浏览器的宽高
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()
浏览器的后退与前进
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()
控制浏览器滚动条
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()
键盘事件
键盘按键用法
按tab键相当于定焦
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os,time
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)
driver.find_element_by_id("account").send_keys(Keys.TAB)
time.sleep(3)
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()
键盘组合键用法
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
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(3)
driver.find_element_by_id("kw").send_keys("webdriver")
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()
鼠标事件
ActionChains 类 context_click() 右击 double_click() 双击 drag_and_drop() 拖动 move_to_element() 移动
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()
driver.implicitly_wait(8)
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()
ActionChains(driver) 生成用户的行为。所有的行动都存储在actionchains 对象。 move_to_element(menu) 移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素 perform() 执行所有存储的行为
定位一组元素
练习资料下载 有时候我们需要定位一组对象,这时候就需要使用findElements 方法。
批量操作对象,比如将页面上所有的checkbox 都勾上
先下载练习资料中的checkbox.html,然后进行以下代码
from selenium import webdriver
import time
import os
driver=webdriver.Chrome()
url="file:///"+os.path.abspath('F:/QQ/%E6%96%87%E4%BB%B6/selenium2html/checkbox.html')
driver.get(url)
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()
get_attribute:获得属性值。
多层框架/窗口定位
先下载练习资料中的frame.html,然后进行以下代码 多层框架或窗口的定位: switch_to_frame() switch_to_window() 对于一个现代的web 应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一 个难题。 有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame 中, seelnium webdriver 提供了一个switch_to_frame 方法,可以很轻松的来解决这个问题。 switch_to_frame(name_or_id_or_frame_element)(已弃用): 可以简单记忆一下,如果这个frame有name和id属性那么就用这两个属性就好,如果没有的话可以先用 find_element_by_xxx方法找到这个frame元素,然后把这个元素传进去,这也是可行的。 switch_to_frame()把当前定位的主体切换了frame里。怎么理解这句话呢?我们可以从frame的实质去理解。 frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此才需要用switch_to_frame方法 去获取frame中嵌入的页面,对那个页面里的元素进行定位。 switch_to_default_content(已弃用):从frame中嵌入的页面里跳出,跳回到最外面的原始页面中。
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/文件/selenium2html/frame.html')
browser.get(file_path)
browser.implicitly_wait(30)
browser.switch_to.frame("f1")
browser.switch_to.frame("f2")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.switch_to.default_content()
browser.switch_to.frame("f1")
browser.find_element_by_link_text("click").click()
time.sleep(3)
browser.quit()
多层窗口定位
有可能嵌套的不是框架,而是窗口,还有真对窗口的方法:switch_to_window 用法与switch_to_frame 相同: driver.switch_to_window(“windowName”)(已弃用)
层级定位
先下载练习资料中的level_locate.html,然后进行以下代码
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/文件/selenium2html/level_locate.html')
browser.get(file_path)
browser.maximize_window()
time.sleep(3)
browser.find_element_by_link_text("Link1").click()
a=browser.find_element_by_link_text("Another action")
ActionChains(browser).move_to_element(a).perform()
time.sleep(3)
browser.quit()
下拉框处理
先下载练习资料中的drop_down.html,然后进行以下代码
from selenium import webdriver
import os,time
driver= webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/文件/selenium2html/drop_down.html')
driver.get(file_path)
time.sleep(2)
options=driver.find_elements_by_tag_name("option")
options[2].click()
time.sleep(2)
driver.quit()
alert、confirm、prompt 的处理
text 返回alert/confirm/prompt 中的文字信息 accept 点击确认按钮 dismiss 点击取消按钮,如果有的话 send_keys 输入值,这个alert\confirm 没有对话框就不能用了,不然会报错 注意:switch_to_alert()只能处理原生的alert
先下载练习资料中的alert.html,然后进行以下代码
from selenium import webdriver
from time import sleep
import os
dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/文件/selenium2html/alert.html')
dr.get(file_path)
dr.find_element_by_id('tooltip').click()
sleep(2)
alert = dr.switch_to.alert
alert.accept()
sleep(2)
dr.quit()
先下载练习资料中的send.html,然后进行以下代码
from selenium import webdriver
from time import sleep
import os
dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/文件/selenium2html/send.html')
dr.get(file_path)
dr.find_element_by_tag_name('input').click()
sleep(2)
alert=dr.switch_to.alert
alert.send_keys("eryueniao")
sleep(2)
alert.accept()
sleep(2)
dr.quit()
先下载练习资料中的modal.html,然后进行以下代码
from selenium import webdriver
import time
import os
dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/文件/selenium2html/modal.html')
dr.get(file_path)
dr.find_element_by_id('show_modal').click()
time.sleep(2)
dr.find_element_by_id('click').click()
time.sleep(2)
dr.find_element_by_xpath('//*[@id="myModal"]/div[3]/button[1]').click()
time.sleep(2)
dr.quit()
上传文件
先下载练习资料中的upload.html,然后进行以下代码
from selenium import webdriver
import os,time
driver = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('F:/QQ/%E6%96%87%E4%BB%B6/selenium2html/upload.html')
driver.get(file_path)
driver.find_element_by_name("file").send_keys('F:\\QQ\\文件\\selenium2html\\alert.html')
time.sleep(2)
driver.quit()
错误
1.selenium.common.exceptions.WebDriverException: Message: unknown Error: cannot find Chrome binary
|