python+selenium+pytest
以公司项目实战为线索,逐步搭建web-ui自动化测试框架,提高测试效率
Oui.
这个作者很懒,什么都没留下…
展开
-
python装饰器
装饰器的参数是类属性的情况# # -*- coding: utf-8 -*-# # @Author : wrximport functools# 装饰器:错误截图,并附到测试报告中def screen(func): @functools.wraps(func) def wrapTheFunction(self, *args, **kwargs): try: func(self, *args, **kwargs) exc.原创 2020-11-18 16:45:23 · 88 阅读 · 0 评论 -
技术面试题总结
1、介绍一下你的项目简单描述一下自己的项目、2、selenium的定位问题一定要记住:https://blog.csdn.net/MoLi_516/article/details/1093239033、C++链表的增删改查:看一下,防止会问增:找到插入位置的前驱节点 >> 新增节点的下一个为前驱节点的下一个 >> 前驱节点的下一个为插入节点删:找到删除位置的前驱节点 >> 令q指向被删除的节点 >> 前驱节点的下一个指向删除节点的下一.原创 2020-11-10 21:32:09 · 735 阅读 · 0 评论 -
理论面试题总结
1、如何理解页面的自适应:自适应布局:就是让网页能够自适应的显示在不同大小的终端设备上,它对于某些大型的网站来说兼容性好,代码高效但是由于它需要开发多个界面来适应不同的设备因此修改难度大不自适应的情况:页面的控件布局有时候会显得混乱、混动条混乱、页面布局混乱、2、如何测试输入框/搜索框https://wenku.baidu.com/view/6749503ee009581b6bd9ebe6.html3、给你一个网站,你该如何测试https://blog.csdn.net/comtop.原创 2020-11-10 21:32:00 · 127 阅读 · 0 评论 -
用例依赖管理
1、场景:用例B的执行依赖用例A,只有当用例A执行成功,用例B才会执行,否则用例B跳过2、解决方案:pytest-dependency3、安装插件:pip install pytest-dependency4、使用栗子:# -*- coding: utf-8 -*-# @Author : wrximport pytestclass Test_A: @pytest.mark.dependency(name="a", scope="package") def t.原创 2020-11-09 22:33:45 · 407 阅读 · 2 评论 -
selenium测试实践
1、登录测试用例和其他测试用例的驱动分开考虑2、除登录测试用例外,其他用例实现浏览器复用技术3、使用return返回一个新的页面,参数返回driver4、使用 def init(self, driver: WebDriver): 方便代码书写5、测试文件中使用setup实例化主页面6、核心代码:# 用于测试登录的首页class Index: def __init__(self): self._driver = webdriver.Chrome.原创 2020-10-31 18:16:18 · 221 阅读 · 0 评论 -
shelve保存cookie数据
获取cookieimport shelvedb = shelve.open("cookies") # 创建一个名为cookies的小型数据库db["cookie"] = self.driver.get_cookies() # 将获取到的数据写入cookie使用cookiedb = shelve.open("cookies") # 打开数据库cookies = db['cookie'] # 获取已保存的cookieself.driver.get("https://x.原创 2020-10-31 15:51:19 · 121 阅读 · 0 评论 -
cookie实现登录
获取cookieCOOKIE = self.driver.get_cookies()得到cookiescookies = [ {'domain': '.csdn.net', 'httpOnly': False, 'name': 'Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac', 'path': '/', 'secure': False, 'value': '1604071163'}, .原创 2020-10-31 12:01:47 · 797 阅读 · 0 评论 -
浏览器复用技术
使用端口# 终端执行 打开一个新的浏览器 // 前提:配置了浏览器的环境变量$ chrome --remote-debugging-port=9999# 代码中,使用配置端口from selenium.webdriver.chrome.options import Optionsoptions = Options()options.debugger_address = "127.0.0.1:9999"driver = webdriver.Chrome(options=options)原创 2020-10-30 22:08:14 · 503 阅读 · 0 评论 -
page object设计模式
形式测试 = 操作细节 + 验证官方解释官网案例/*** * Tests login feature 没有使用page objetc的验证案例 */public class Login { public void testLogin() { // fill login data on sign-in page driver.findElement(By.name("user_name")).sendKeys("testUser"); driver.findE原创 2020-10-30 09:03:49 · 159 阅读 · 0 评论 -
文件上传和弹框处理
文件上传input标签可以直接使用send_keys(文件地址)上传文件el = driver.find_element_by_id("上传按钮id")el.send_keys("文件路径+文件名")弹框处理对于JavaScript所生成的alert、confirm以及prompt弹框,可以使用switch_to.alert()方法定位到,然后使用text / accept / dissmiss / send_keys等方法进行操作模拟弹框$ 终端执行window.alert("这原创 2020-10-30 00:44:49 · 451 阅读 · 0 评论 -
selenium执行javascript脚本
selenium能够直接执行js,在当前页面中进行js交互1、解决很多click不生效的问题2、页面滚动到底部、顶部3、处理富文本,时间控件的输入调用js# 栗子:js代码window.alert('Selenium弹框测试') // 弹框a = document.getElementById('kw').value // 获取元素的值document.title // 获取页面标题JSON.stringify(performance.timing) // 获取当前页面的性原创 2020-10-28 21:39:59 · 695 阅读 · 0 评论 -
selenium多浏览器处理
兼容性测试:考虑多种浏览器1、chrome、firefox、headless等浏览器的自动化支持2、传递不同的参数来测试不同的浏览器# 测试执行 终端:browser=firefox pytest browser = os.getenv("browser") if browser == 'firefox': driver = webdriver.Firefox() elif browser == 'headless': driver = webd原创 2020-10-28 21:55:47 · 293 阅读 · 0 评论 -
selenium多window和多frame
如何处理多window先获取当前的窗口句柄:driver.urrent_window_handle在获取所有的窗口句柄:driver.window_handles切换窗口:driver.switch_to_window# 案例win1 = driver.current_window_handle // 当前窗口句柄wins = driver.window_handles // 当前所有窗口句柄driver.switch_to.window(wins[-1]) // 切换新打开的原创 2020-10-28 22:36:55 · 170 阅读 · 0 评论 -
Actions操作
ActionsAction Chains:执行PC端的鼠标点击、双击,右键,拖拽等事件,对h5页面无效执行原理:调用ActionChains方法时,不会立即执行,而是所有的操作,按照顺序放在一个队列中,当调用perform时,队列中的事件依次执行基本用法# 生成一个动作action = ActionChains(driver)# 动作添加方法1action.方法1# 动作添加方法2action.方法2# 调用perform()方法执行action.perform()具体原创 2020-10-29 00:52:27 · 780 阅读 · 0 评论 -
selenium鼠标悬停定位和svg
项目页面:悬停,点击区域放大,点击,页面跳转当鼠标悬停遇上菱形框(svg):悬停区域最外侧框,否则报错 400:不可交互# -*- coding: utf-8 -*-# @Author : wrxfrom selenium.webdriver.common.action_chains import ActionChainsfrom public.page_obj.basePage import BasePageclass CpipPage(BasePage): """ s原创 2020-09-17 11:51:01 · 571 阅读 · 0 评论 -
selenium之特殊定位总结
一、定位下拉框S = driver.find_element_by_css_selector("#SysID")S_all_option = S.find_elements_by_tag_name("option")for value in S_all_option: if "待选" in value.text: value.click() break...原创 2019-12-27 10:33:10 · 199 阅读 · 0 评论 -
selenium之基本框架与报错总结
基本框架from selenium import webdriverdriver = webdriver.Firefox()driver.get("url")driver.quit()关于定位报错,考虑以下几种情况1、复制粘贴错误2、id可变,尝试多种定位策略3、页面没有正常刷新 使用sleepfrom time import sleepsleep(3)4、多层ifr...原创 2019-12-27 10:23:29 · 194 阅读 · 0 评论 -
web元素常见操作
1、获取元素的属性名称element.get_attribute("属性名称") 2、原创 2020-10-31 21:21:51 · 175 阅读 · 0 评论 -
selenium定位与常见操作
常见操作find_element(By.ID,'kw').send_keys("我是小可爱")find_element(By.ID,'su').click()Xpath表达式 ❤️结果 ❤️/bookstore/book[1]选取属于bookstore子元素的第一个book元素/bookstore/book[last()]选取属于bookstore子元素的最后一个book元素/bookstore/book[last()-1]选取属于bookstore子元素的倒原创 2020-10-28 20:22:27 · 297 阅读 · 0 评论 -
直接等待、显示等待和隐式等待
代码中均可使用,并不矛盾直接等待强制等待:线程休眠一段时间time.sleep(3)隐式等待设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没有出现就抛出异常self.driver.implicitly_wait(3)显式等待代码中定义等待时间,当条件发生时才继续执行代码‘WebDriverWait’配合unit()和unitl_not()方法,根据条件进行等待程序每隔一段时间(默认为0.5秒)进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置原创 2020-10-29 14:06:24 · 362 阅读 · 0 评论 -
selenium测试用例编写
小白入门from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Firefox()# 电脑没有配置浏览器驱动的时候,如下设置# driver = webdriver.Firefox(executable_path="driver path")driver.implicitly_wait(10)driver.get("http://www.python.org原创 2020-10-29 22:06:53 · 246 阅读 · 0 评论 -
Selenium IDE用例录制
下载安装seleniumIDE官网Chrome插件 :Chrome插件无法在国内安装,Firefox可以直接安装Firefox插件github release其他版本使用IDE通过在浏览器的菜单栏中点击它的图标来启动或者:Chrome: chrome://extensions或者:Firefox: about:addons界面说明代码导出常见问题...原创 2020-10-30 00:14:59 · 132 阅读 · 0 评论 -
selenium简介和配置安装
简介selenium官网Selenium支持web浏览器的自动化。主要由三个工具构成:WebDriver、IDE、Grid。WebDriver是模拟浏览器运行,IDE用于录制,Grid用于分布式架构配置安装准备好python环境准备好selenium环境:pip install seleniumDriver介绍下载浏览器对应版本的driver版本:-> 淘宝镜像-> 官网网站driver配置环境变量...原创 2020-10-29 22:59:16 · 163 阅读 · 0 评论