Selenium自动化测试一些应用点

Selenium自动化测试一些应用点


一、基础应用

1.上传与下载

1.普通上传:通过input + 本地文件路径
2.插件上传:Flash、JS、Ajax技术上传
3.下载:browser.download.folderList可以设置Firefox下载路径
    download.default_directory设置Chrome下载路径
4.下载文件比对:通过MD5数据比对下载文件和标准文件的差异

2.Cookies

1.Cookies中数据是以字典形式存放

3.截图验证方式

通过截图比对验证效果,利用pillow包,进行像素对比,差异值在一定范围即可。

4.滑块操作

i. 定位滑块
ii. 获取滑块的宽高 element.size['width'], element.size['height']
iii. 根据宽高移动对应的像素值

5.颜色验证

login_button_bg_color = Color.from_string(driver.find_element(By.ID, "login").value_of_css_property('background-color'))

二、高级应用

1.利用JS脚本修改页面属性

driver = webdriver.Chrome()
js_cmd = 'document.getElementById("id1").removeAttribute("readonly")'
driver.execute_script(js_cmd)
  • 通过removeAttribute()移除了readonly属性

2.滑动相关

driver = webdriver.Chrome()
js_cmd_1 = 'window.scrollTo(x,y)'  # x代表横向,y代表纵向
# document.body.scrollHeight  滑动到底部
# document.body.scrollWidth   滑动到最右边

ele = driver.find_element_by_id("id1")
js_cmd_2 = 'arguments[0].scrollIntoView();'  # 滑动到指定元素
driver.execute_script(js_cmd_2, ele)

3.启动参数

driver = webdriver.Chrome()
options = webdriver.ChromeOptions()
# 网页最大化
options.add_argument("--start-maximized")
# 指定编码格式
options.add_argument("lang=zh_CN.UTF-8")  
# 不同版本浏览器可以通过该参数设置driver版本
options.add_argument("executable_path='c:\\python\chromedriver.exe'") 
# 无头模式(无界面模式)
options.add_argument("headless") 
# 页面加载模式
caps["pageLoadStrategy"] = "normal"
options.add_argument("headless") 
driver = webdriver.Chrome(chrome_options=options, desired_cpabilities=caps)
  • 此外还有禁止图片加载、代理服务器等方式可以设置
  • 页面加载策略包含:
    • normal: 正常整个页面加载完成和子资源解析完成
    • eager:等待初始HTML文档加载和解析完,放弃加载样式表、图像和子框架
    • none:在页面加载但是解析未完成

4.异常的出现与问题分析

4.1 NosuchElementException

查找元素不存在,分析方向:
1.xpath 路径是否正常,定位是否准确
2.页面或者元素加载延迟,可能和网络带宽、访问页数据量有关,合理使用等待机制
3.确实存在BUG

4.2 ElementNotVisibleException

与不可见网页元素交互,分析方向:
1.借助JS代码来实现交互
2.Selenium可以判断页面元素是否真的显示在显示屏上,所以可能是BUG,得与开发交流

三、等待机制

3.1 影响页面元素加载的因素

  1. 计算机性能,低性能渲染页面会慢
  2. 被测系统的服务器性能
  3. 浏览器性能,不同浏览器执行JS脚本性能差距大,不建议用Selenium做浏览器的兼容性测试
  4. 网络因素,一般出现问题的最主要因素。若被测系统大量使用了Ajax,对网络要求会很高

3.2 强制等待

  • 一般使用time.sleep(2)的形式称之为强制等待
  • 设置页面加载超时
driver = webdriver.Chrome()
driver.set_page_load_timeout(2)

3.3 隐性等待

  1. 约定时间内持续监测,找到就进行后续操作
  2. driver.implicitly_wait(10)
  3. 隐性等待作用于webdriver整个生命周期
  4. 隐性等待需要整个页面加载完成,对于分块加载的页面会增加测试市场
  5. 会干扰显性等待

3.4 显性等待

语法格式
WebDriverWait(driver,超时时长,调用频率(每隔多长时间检测一下,默认0.5秒),忽略的异常类型).until(可执行的方法, 超时后返回的提示信息)

  • WebDriverWait类和expected_conditions实现显性等待

四、Selenium Grid

4.1 适用场景

  • 兼容性测试,同时在不同浏览器、操作系统、计算机上执行测试用例
  • 减少执行的时间

启动方式: 命令行、借助JSON配置文件、利用Docker启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值