Selenium基础知识及使用unittest简单重构

2020-11-05  本文已影响0人  程序员lsq

UI -Selenium自动化测试

什么是自动化测试

  1. 什么是测试

  2. 测试的分类

  3. 什么是自动化测试

  4. 自动化测试的技术选型

什么是测试:

自动化测试

什么是自动化测试

web自动化的技术选型

  1. 发展趋势要稳定上升

  2. 活跃的社区

  3. 开源软件

  4. 支持主流编程语言

  5. 支持主流浏览器

Selenium

  1. Selemium WebDriver

  2. Selenium IDE

  3. Selenium Grid


Selenium WebDriver

WebDriver <------>Remote WebDriver<--->Driver<----->Browser

WebDriver<------>Selenium Server or Grid<--------->Driver<------->Browser

Selenium IDE

Selenium Grid



环境搭建


  1. Selenium
     pip install selenium
  1. 浏览器驱动

    1. https://www.selenium.dev/documentation/en/webdriver/driver_requirements/

    2. 设置环境变量:把下载的浏览器器驱动所在的目录添加到系统path 中

Selenium 核心技术

  1. Selenium实现元素定位

  2. Seenium WebDriver属性

  3. Selenium WebDriver方法

Selenium实现元素定位

# 方法名称 方法描述
1 find_element_by_id 通过ID定位元素
2 find_element_by_xpath 通过xpath定位
3 find_element_by_link_text 通过连接文本定位
4 find_element_by_partial_link_text 通过连接部分文本定位
5 find_element_by_name 通过标签名称定位
6 find_element_by_tag_name 通过标签名称定位
7 find_element_by_class_name 通过CSS Class定位

Selenium WebDriver方法

# 方法 描述
1 driver.back() 浏览器后退
2 driver.forward() 浏览器前进
3 driver.refresh() 浏览器刷新
4 driver.close() 关闭当前窗口
5 driver.quit() 退出浏览器
6 driver.switch_to.frame() 切换到frame
7 driver.switch_to.alert 切换到alert
8 driver.switch_to.active_element 切换到活动元素

Selenium WebElement

Selenium 操作form

Selenium 操作CheckBox和radiobutton

Selenium 操作下拉列表

# 方法/属性 方法/属性描述
1 select_by_value() 根据值选择
2 select_by_index() 根据索引选择
3 select_by_visible_text 根据文本选择
4 deselect_by_value 根据值反选
5 deselect_by_index 根据索引反选
6 deselect_by_visibile_text 根据文本反选
7 deselect_all 反选所有
8 options 所有选项
9 all_selected_options 所有选中项
10 first_selected_option 第一个选择选项

Selenium 处理弹窗

Selemium 三种等待方式

  1. time.out(固定等待)

    • 方便快捷,在正式项目不建议使用
  2. implicitly_wait(隐式等待)

    • 设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束为止

    • 页面元素加载完成但javasc代码未加载完

    • 隐式等待对整个driver周期都起作用,在最开始设置一次就够了

  3. WebDriverWait(显式等待)

    • WebDriverWait是Selenium 提供得到显式等待模块引入路径:
  from selenium.webdriver.support.wait import WebDriverWait

Seleium 等待条件

Selenium鼠标和键盘事件

Selenium 执行JavaScript脚本

Selenium 屏幕截图

# 方法 方法描述
1 save_screenshot(filename) 获取当前屏幕截图,保存为指定文件,filename指定保存路径或者文件名
2 get_screenshot_as_base64 获取当前屏幕截图base64编码字符串
3 get_screenshot_as_file(fimename) 获取当前屏幕截图,使用完整的路径
4 get_screenshot_as_png() 获取当前屏幕截图的二进制文件数据

Selenium 定位frame iframe

# 方法 方法描述
1 switch_to.frame(reference) 切换frame,reference时传入参数,用来定位frame,可以传入id, name, index ,以及Selenium的WebElement对象
2 switch_to.default_content() 返回主文档
3 switch_to.parent_frame() 返回父文档

项目重构

使用unittest重构

什么是unittest

unittest中的方法

断言

方法 检查
assertEqual(a,b) a==b
assertNotEqual(a,b) a!=b
assertTrue(x) bool(x) is True
asserFalse(x) bool(x) is False
assertIs(a,b) a is b
assertIsNot(a,b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a,b) a in b
assertInNot(a,b) a not in b
assertIsInstance(a,b) isinstance(a,b)
assertNotIsInstance(a,b) not isinstance(a,b)

加载测试用例的四种方法

  1. 实例化

    • suite = unittest.TestSuite()

    • loader = unittest.TestLoader()

  2. 通过测试用例类进行加载

    • suit.addTest(loader.loadTestFromTestCase(MyTest1))

    • suit.addTest(loader.loadTestFromTestCase(MyTest2))

  3. 通过测试模板

    • suit.addTest(loader.loadTestFromTestMoudle(MyTest1))

    • suit.addTest(loader.loadTestFromTestMoudle(MyTest2))

  4. 通过路径加载

   import os
    path = os.path.dirname(os.path.abspath(__file__))
    suit.addTEst(loader.discover(path))
  1. 逐条加载测试用例

    • case1 = MyTest1("test1")

    • case2 = MyTest2("test2")

    • suite.addTest(case1)

    • suite.addTest(case2)

重构

  1. 习惯测试用例基础: unittest.TestCase
  2. init 修改为 setup
  3. 将assert 断言修改为unittest断言
  4. 关掉浏览器放到teardown
  5. 测试顺序要加序号 :test1、test2
上一篇 下一篇

猜你喜欢

热点阅读