IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 自动化测试selenium重点来了 -> 正文阅读

[开发测试]自动化测试selenium重点来了

本文重点:
selenium特点、webdriver工作原理、脚本录制和一些简单api的使用


什么是自动化测试?

自动化测试是指软件测试的自动化,在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。

自动化测试工具有哪些?

QTP

  • selenium
  • jmeter(性能测试工具,主要测试接口,可以自己设置,也可以录制脚本,也可以进行接口测试)
  • Loadrunner (性能测试工具,UI界面录制)
  • soupUI(接口测试工具,postman也可以进行接口测试)
  • appium(APP自动化测试工具)
  • macaca 阿里巴巴开发的

自动化测试金字塔(自上而下):

UI自动化    页面用例维护量比较大,适合界面稳定的时候做自动化测试
接口自动化   适合接口稳定的项目,和UI界面比效率比较高,用例维护量适中
单元测试     使用java语言中Junit去做
   越往上,效率越低,测试用例维护越来越麻烦

自动化适用于什么测试?

兼容性测试、回归测试(脚本重复利用率越高,自动化的价值越大)

如何实施自动化测试:先分析,然后编写测试用例,实现脚本,执行脚本,进行对脚本维护


selenium有哪些特点?

  • 轻量级,安装起来非常方便
  • 支持多语言,ruby,Python,java,C#等,受用人群就更加广泛
  • 支持多平台,Windows,Mac,Linux
  • 支持多浏览器,Firefox,IE,Chrome,edge,Safari,Opera
  • 支持分布式测试,自动化测试脚本太多时,可以把测试用例分布到不同的测试机器上执行,实现测试的快速实施
  • 而且还是免费

自动化测试selenium是一个工具集。
selenium 1.0 包括 selenium RC、selenium IDE、selenium GRID 存在环境沙箱问题
selenium 2.0 是selenium 1.0 + webdriver,解决了环境沙箱问题
selenium 3.0 增加了一些新特性,增加了edge、Safari的原生内核

webdriver工作原理

webdriver 浏览器的驱动,控制浏览器
乘客向出租车司机说明去哪里,出租车司机相当于webdriver,驱动汽车去那,乘客相当于脚本。

selenium IDE 录制脚本,打开IDE,新建一个项目,然后REC录制脚本,输入URL,可以回放录制的脚本,也可以选择语言导出。


简单API的使用

如何写一个简单脚本?

#要想使用selenium 的webdriver 里的函数,首先把包导进来
  from selenium import webdriver
#导入time
  import time
#需要操控的浏览器,首字母必须大写
  driver = webdriver.Chrome()
#打开网页-百度的的网址
  driver.get("https://www.baidu.com")
  
  time.sleep(8)
  #关掉软件
  driver.close()  
   #关掉软件,并清除浏览器的一些缓存
   driver.quit()  

不管是用哪种方法,定位时,元素必须是唯一的,才可以定位到。

定位元素的方式有哪些?

 - id
 - name 
 - class name   
 - link text 链接 
 - partial link text  部分链接内容 
 - tag name 
 - xpath	
 	先定位到那个元素,右击检查,找到那个元素,右击copy xpath找到这个元素
- css selector
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
#不管是用哪种方法,定位时,元素必须是唯一的,才可以定位到
#id
# driver.find_element_by_id("kw").send_keys("赵丽颖")
# driver.find_element_by_id("su").click()

#name
# driver.find_element_by_name("wd").send_keys("王一博")
# driver.find_element_by_id("su").click()

#class name
# driver.find_element_by_class_name("s_ipt").send_keys("迪丽热巴")
# driver.find_element_by_id("su").click()

#link text 链接内容
# driver.find_elements_by_link_text("新闻").click()

#partial link text  部分链接内容
# 用hao来定位hao123
# driver.find_elements_by_partial_link_text("hao").click()

#tag name   不能定位到,input太多了,不唯一
#页面上多个元素的标签都是input,所以这个无法运行
# driver.find_element_by_tag_name("input").send_keys("易烊千玺")
# driver.find_element_by_tag_name("input").click()

#xpath
#从这个脚本的头(head),一直到脚本的位置,这个元素的的路径
#先定位到那个元素,右击检查,找到那个元素,右击copy xpath找到这个元素
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("100周年")
# driver.find_element_by_xpath("//*[@id='su']").click()

#css selector
driver.find_element_by_css_selector("#kw").send_keys("叛逆者")
driver.find_element_by_css_selector("#su").click()

time.sleep(8)
driver.quit()

操作测试对象的方法?

 - click     点击对象 
 - send_keys 
 	send_keys("xx") 用于在一个输入框里输入xx 内容。
 - clear     清除对象的内容 
 - submit    提交表单 
 - text      获取元素的文本信息
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)
#
# #clear & submit
# driver.find_element_by_id("kw").clear()
# time.sleep(3)
# driver.find_element_by_id("kw").send_keys("吴倩")
# driver.find_element_by_id("su").submit()
# time.sleep(6)

#text
text = driver.find_element_by_id("bottom_layer").text
print(text)

time.sleep(3)
driver.quit()

添加等待

- 固定等待:只能选择一个固定的时间的等待
	time.sleep(10)
	//time.sleep(10) 必须等待10s
		
- 智能等待:可以在一个时间范围内智能的等待。
	driver.implicitly_wait(10)
	//implicitly_wait(10)  需要等待的匀速加载出来了,就立即停止等待,超过10s报异常

面试题:固定等待和只能等待的区别?

打印title

#和添加等待一起使用才奈斯
time.sleep(10)
title = driver.title
print(title)

打印url

url = driver.current_url
print(url)

浏览器的最大化

driver.maximize_window()

设置浏览器的宽和高

driver.set_window_size(600,1000)

浏览器的前进和后退
后退:

driver.back()

前进:

#time.sleep(7)
driver.forward()

拖动滚动条

# 到最底端
time.sleep(3)
js1 = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js1)
time.sleep(3)
# 到最顶端
js2 = "var q=document.documentElement.scrollTop=0"
driver.execute_script(js2)

键盘事件

  • 键盘按键用法

      必须引入Keys包
      from selenium.webdriver.common.keys import Keys
    
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("http://127.0.0.1:88/zentao/user-login.html")
#通过键盘按键
driver.find_element_by_id("account").send_keys("admin")
#tab 的定位
driver.find_element_by_id("account").send_keys(Keys.TAB)
driver.find_element_by_name("password").send_keys("chandao1023k")
time.sleep(3)
#点击登录,进行登录
#driver.find_element_by_id("submit").click()
#按enter键,进行登录
driver.find_element_by_name("password").send_keys(Keys.ENTER)

time.sleep(5)
driver.quit()
  • 键盘组合键用法
    password.send_keys(Keys.CONTROL,‘a’)
    password.send_keys(Keys.CONTROL,‘x’)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("http://127.0.0.1:88/zentao/user-login.html")
#通过键盘按键
driver.find_element_by_id("account").send_keys("admin")
driver.find_element_by_id("account").send_keys(Keys.TAB)
password = driver.find_element_by_name("password")
password.send_keys("chandao1023")
time.sleep(3)
password.send_keys(Keys.CONTROL,'a')
time.sleep(3)
password.send_keys(Keys.CONTROL,'x')
time.sleep(6)
password.send_keys("chandao1023k")
time.sleep(3)
#点击登录,进行登录
#driver.find_element_by_id("submit").click()
#按enter键,进行登录
driver.find_element_by_name("password").send_keys(Keys.ENTER)

time.sleep(5)
driver.quit()

鼠标事件

	需要导入ActionChains包
	from selenium.webdriver.common.action_chains import ActionChains

context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 移动

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("少年的你")
# driver.find_element_by_id("kw").submit()
# driver.find_element_by_id("kw").click()
su = driver.find_element_by_id("su")
#双击
#完成双击这个动作:将驱动放到ActionChains里边,定位那个元素进行双击,最后perform执行一下
# ActionChains(driver).double_click(su).perform()

#右击
ActionChains(driver).context_click(su).perform()

time.sleep(5)
driver.quit()

定位一组元素
比如,批量操作对象,比如将页面上所有的checkbox 都勾上

from selenium import webdriver
import time
import os    #引入本地系统
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("D:/SeleniumHtml/selenium/checkbox.html")
driver.get(file)
time.sleep(2)

# 选择页面上所有的input,然后从中过滤出所有的checkbox 并勾选之
inputs = driver.find_elements_by_tag_name('input')
for input in inputs:
    if input.get_attribute('type') == 'checkbox':
        input.click()

time.sleep(5)
driver.quit()

get_attribute:获得属性值。

多层框架/窗口定位
switch_to.frame()
跳转到默认页面:switch_to.default_content()
switch_to.window()

层级定位
先点击显示出1个下拉菜单,然后再定位到该下拉菜单所在的ul,再定位这个ul 下的某个具体的link。

#点击Link1链接(弹出下拉列表)
driver.find_element_by_link_text('Link1').click()
#找到id 为dropdown1的父元素
WebDriverWait(dr,10).until(lambda the_driver:
the_driver.find_element_by_id('dropdown1').is_displayed())
#在父亲元件下找到link 为Action 的子元素
menu = driver.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠标定位到子元素上
webdriver.ActionChains(driver).move_to_element(menu).perform()

下拉框处理

options = driver.find_element_by_tag_name("option")
for option in options
    if option.get_arrtribute('value') == '9.03':
        option.click()
#用数组的方式定位,注意下标是从零开始的
options[3].click()

alert错误弹出框的处理
关闭错误弹出框:
alert = driver.switch_to.alert()
text = alert.text
print(text)
‘#关闭弹窗
alert.accept()

DIV对话框处理

# 打开对话框
driver.find_element_by_id('show_modal').click()
time.sleep(3)
# 点击对话框中的链接
driver.find_element_by_id('click').click()
link)
time.sleep(4)
# 关闭对话框
div = driver.find_element_by_class_name('modal-footer')
buttons = div.find_elements_by_tag_name('button')
buttons[0].click()

上传文件操作
’#定位上传按钮,添加本地文件
driver.find_element_by_tag_name(“input”).send_keys(“存放的位置”)


  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:10:10  更:2021-08-27 12:10:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:31:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码