selenium 使用场景和示例
【基于UI的自动化测试开发 在实际项目中合适的介入场景/条件是什么?】
一。 项目背景方面
二。技术方面 1. 能找到适合于本项目技术特点的 自动开发工具。 工具选择原则:团队成员掌握工具所需的基本技能、工具本身基本成熟且有维护支持、工具使用成本能承受(开源)
【基于selenium工具自动化的基本原理】
【准备好对应selenium工具体系的环境】
【可能的辅助工具】
【selenium 基本功能】
selenium中最重要的实例(对象)
1) webdriver实例, 怎么得到 ---> “实例化对应浏览器的webdriver类”得到。
先导入webdriver模块, 再使用webdriver中某一个浏览器的webderiver类 完成实例化
例如: driver = webdriver.Chrome()
创建好实例后, 才能通过该driver实例 调用各种操作浏览器的方法
2)webElement实例。 它是怎么得到的?
通过driver.find_element() 方法执行后 得到的返回值
driver.find_element(By.??, “value”).click()
或
input0bj = driver.find_element(By.??, “value”) # 通过变量名 保存该返回值
inputObj.clear()
inputObj.send_keys("value")3). actionChains实例 (模拟鼠标或键盘动作), 该实例怎样得到?
导入该类 ac = ActionChain(driver) # 通过driver 实例化得到
执行模拟动作的模式: 安排动作->安排动作->安排动作。。->统一执行动作
例1 : ac.move_to_element().click().send_keys().perform()
例2: "在商品管理模块的商品信息编辑中,输入商品详细描述信息"
# 导入模拟动作事件 类
from selenium.webdriver.common.action_chains import ActionChains
#实例化动作事件类, 需要使用driver去初始化
ac = ActionChains(self.driver)
#开始"安排动作"-- 调用各种动作方法
div_tabbody = self.driver.find_element_by_id("tabbody-div")
ac.move_to_element_with_offset(div_tabbody , 200, 200)
ac.double_click()
ac.send_keys("商品详情描述案例文本")
#按之前动作的调用顺序 集中执行所有的动作
ac.perform()
#动作执行完后 清空所有的动作
ac.reset_actions()4) 特殊元素定位警告弹窗操作 alert实例, 该实例怎样得到的? 通过driver.switch_to.alert 返回得到的
alt = driver.switch_to.alert
alt.text # 获取弹窗中的文本
alt.accept() # 点击弹窗的 "确认"
alt.dismiss() # 点击弹窗的 "取消"js = 'window.open("http://172.31.25.122/admin");'
driver.execute_script(js)
#获取当前商品句柄
windows = driver.window_handles
#切换到新窗口
driver.switch_to.window(windows[-1])driver.switch_to.frame("menu-frame")
退出回到首页面
driver.switch_to.default_content()loader = TestLoader()
#收集用例的路径
project_path = os.path.dirname(os.getcwd())
收集用户的条件
suite = loader.discover(project_path, "test*.py")2.【driver对象的常用方法】
1) get() 2) quit() 3) find_element()
find_elements() # 该方法如果未找到任何元素不会报错,返回空列表 4) switch_to 5) implicitly_wait(秒数) # 隐式元素识别的智能等待
3.【find_element方法的几种方式】
id、name、classname tagname link_text、 partial_link_text xpath css_selector
xpath 可以同时从 标签的名称、属性、文本值、层次关系4个维度定位, 准确度高且灵活。
xpath基本语法格式: //步/步/.../ 每一步的通式: 标签名[修饰方式] 索引 整数值从1开始 @属性=‘值’ text()=‘值’ /../../ 在xpath中可以用两点 表示上一层标签
// 表示不定子层。 例如 table//td 表示table标签下无论哪一层的td 都匹配
css和xpath语法相似
标签名[属性修饰]>标签名[属性修饰]
其中id属性和class属性 不需要写在方括号中 id属性用 # 号
class属性用 . 号
css的特点, 部分只能通过元素样式 定位的场景 只有通过css selector方式实现 例如: input:checked 表示定位被选中的单选框或复选框
【Python单元测试框架 unittest】
2.1) 测试固定动作
def setUp(self) # 测试代码前置动作方法
def tearDown(self) # 测试代码后置动作方法 2.2) 测试方法
def test****(self)# 必须以小写test开头这两个要点 都是写在测试类中。
定义测试类的要求:
class 类名(uinttest.TestCase): # 测试类要继承自 unittest包下的TestCase类。2.3) 测试集 unittest.TestSuite类, 实例化该类 可以创建收集测试方法的"容器"
userSide_testsuite = unittest.TestSuite() # 创建了一个测试集实例
adminSide_testsuite = unittest.TestSuite()
1: 是一个测试加载器的discover方法 自动收集指定包下面的符合匹配标准的 测试模块中的测试方法
tests = unittest.defaultTestLoader.discover(startdir=r"c:\\workspace\\Testcase", pattern='*test.py')
userSide.addTests( tests ) # 往测试集容器中 加入被discover方法找到的 所有"测试方法"
2: 手动实例化测试类中的方法,然后加入测试集容器
假设有测试类为:
class TestLogin(unittest.TestCase):
def test_Loginsuc(self):
pass
def test_LoginFail(self):
pass
创建测试类中某一测试方法的实例
t1 = TestLogin("test_Loginsuc") # 实例化了 第一个测试对象,该对象只包含 test_Loginsuc 测试方法
t2 = TestLogin("test_LoginFail") # 实例化了 第二个测试对象,该对象只包含 test_LoginFail 测试方法
adminSide_testsuite.addTests( [t1,t1,t1,t1,t2] )
2.4) 测试执行器:
1.unittest自带的 TextTestRunner类 2. 第三方的 HTMLTestRunner类, 它在HTMLTestRunner.py 模块中实例化测试执行器类后, 调用实例的run方法 把测试收集好测试方法的 测试集传递给run方法执行
runner = TextTestRunner()
runner.run(adminSide_testsuite)
runner2 = TextTestRunner(adminSide_testsuite)
runner2.run(suite)selenium 简单示例
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://cn.bing.com/')
time.sleep(0.5)
driver.find_element(by=By.ID,value='sb_form_q').send_keys(kw) # 找到元素进行输入
driver.find_element(by=By.ID,value='search_icon').click() # 找到元素触发点击事件
time.sleep(2)
text = driver.find_element(by=By.ID,value='b_results').text #获取元素下所有的text
print(text)
driver.close() # 关闭浏览器开启无头浏览器访问
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
chrome_options.add_argument('--headless') # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://cn.bing.com/')
time.sleep(0.5)
driver.find_element(by=By.ID,value='sb_form_q').send_keys(kw)
driver.find_element(by=By.ID,value='search_icon').click()
time.sleep(2)
text = driver.find_element(by=By.ID,value='b_results').text
print(text)
driver.close()读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。