聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的?
本周我们的讨论话题是关于Selenium自动化:
话题:聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的?
话题描述:Selenium是大家做UI自动化用到的主流框架,在平时写脚本的过程中,你肯定会碰到各种各样的坑,估计会花费你大量的时间查资料去解决。这周我们就来聊聊在Selenium过程中,你碰到的那些坑,以及最终都是怎么解决的?希望讨论内容可以帮助到遇到相同问题的同学。每一次的分享和讨论,对你来说都是有思考过程的,都是一次成长和提升。
大家讨论分享的结果
知识星球—silent
element元素可以定位到但是单击会报错 转用双击解决问题 定位元素不稳定,直接找元素加使用显示等待找,找元素的时候使用while 循环 找到元素直接返回element 对象 找不到 sleep 0.5 continue 再找 最多找10 次 用时大概6s多 目前这种方式解决了div弹窗提示出现时断言代码已经执行完毕造成断言失败 个人最近做ui自动化的一点小体验 望大佬指正
- 点评:看了好几遍silent分享的内容,但是没太理解他的思路,最开始我以为只是点击失败,所以还回复“可以试试用执行js脚本的方式来点击”。但是现在又认真读了读这几句话,开始有些犯迷糊了。
- 如果是解决element元素可以定位,但是不能点击的错误。有很多种方法:第一可以用业内比较多用的方法,driver.execute_script("$(arguments[0]).click()", element),这种方法能直接将点击事件作用于控件上。第二可以自己封装重试点击的方法,当然可以结合具体的场景实现方法的逻辑(比如:检测是否有浮层或者弹框等)。
我最近碰到的问题
因为我的界面元素操作其实不多,主要操作就是:添加cookie、三次点击事件,所以我碰到的元素定位的问题比较少。我最主要的操作点是多并发且同时启动多个chrome浏览器实例,所以我碰到的问题多是和资源相关的。
- message:unknown error: unable to discover open pages:碰到这种错误,根据字面意思,就是无法打开新的页面了,可以检查下内存是否够用,启动一个浏览器实例需要消耗220M内存左右。我之前就是忽略了运行脚本机器的资源问题,造成碰见这个错误,排查了好久。
- Message: timeout: Timed out receiving message from renderer:造成这个错误的原因应该挺多的,如果看Selenium日志的小伙伴会发现,即使脚本是正常的情况,也有可能会刷这个日志。不过我碰到的这类错误,有两个主要原因:
- 运行机器(hub和node在一台机器或者是node机器)的cpu被打满了,造成不能及时处理请求,进而造成超时。
- 用docker容器启动节点,hub和node不在同一台机器上,会超时。(这个在之前的文章中有提到过)。
- unknown error: DevToolsActivePort file doesn't exist:在没有界面的服务器上跑脚本,需要在启动浏览器时配置两个参数:--headless(无头模式)、--no-sandbox(以最高权限运行)。
- 上面提到的问题:元素可以定位,但是点击却不生效。我是直接采用driver.execute_script("$(arguments[0]).click()", element)这种方式,可以正常解决。
- docker 部署selenium grid,在不同机器上,网络不通,这个目前还没研究,可能需要使用docker集群管理。
- 关闭webdriver时quit()和close()用的不对。quit是退出webdriver,并且关闭与之关联的所有窗口;close仅仅是关闭当前窗口。这个在Selenium Grid中体现很明显,如果调用的是close方法,会看到节点一直不能被释放。
总结
我之前写UI自动化不多,最近接触Selenium,感触最深的是,经常会抛一些很莫名其妙的错误,然后就只能各种查资料。实在是找不到资料,就只能去翻源码,往往是能找到一些思路的。
所以,通过本周的讨论话题,也是建议大家在接触一种新的技术时,可以一边用,一边学。碰到对应的问题,再查资料解决,这样反而会更容易上手。
这就是之前香帅老师在课程里提到的learning by doing。
聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的?的更多相关文章
- selenium做UI自动化时,模拟鼠标各种操作的ActionChains的用法
1.selenium做自动化的时候,需要模拟鼠标进行单击.双击.右键.拖拽等操作,selenium提供了ActionChains类来进行处理. 2.执行原理:当你调用ActionChains的方法时, ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏览器 ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- selenium+python自动化处理时间控件
尝试编写12306网站查询余票信息的自动化脚本时,碰到日期选择的问题,此处做一下记录:
- RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)
好久没有继续分享关于自动化测试相关的东西了,自动化在现今的测试领域已经越来越重要了,大部分公司在测试岗位招聘中都需要会相关的自动化测试知识.而 RobotFramework自动化测试框架 是自动化测试 ...
随机推荐
- java的23种设计模式之建造者模式
场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...
- JavaWeb中遇到的字符编码问题
一.常见的编码方式 1.UTF-8 2.ISO-8859-1 二.Tomcat的编码问题 Tomcat8和7的编码方式 Tomcat7对URI默认编码是ISO-8859-1 Tomcat8对URI默认 ...
- 菜篮子成血战场!生鲜O2O为何厮杀如此惨烈
衣食住行作为与大众生活直接挂钩的刚需,已经被诸多互联网企业全面渗入,并在彻底颠覆大众原有的生活形态.但其中作为最底层.最基本的"菜篮子"--生鲜市场,似乎仍然没有被互联网元素完全& ...
- Java入门教程八(面向对象)
对象概念 一切皆是对象.把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作.一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的.对象之间通过 ...
- Spring Boot从入门到精通(六)集成Redis实现缓存机制
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...
- 7-7 jmu_python_是否是数 (10 分)
本题要求从键盘输入一个字符串,判断该串是否属于整数.浮点数或者复数的表示 输入格式: 输入一个字符串 输出格式: 输出yes或no 输入样例: -299 输出样例: yes a = input() t ...
- web前端问题整理
1.常用那几种浏览器测试?有哪些内核(Layout Engine)? (Q1)浏览器:IE,Chrome,FireFox,Safari,Opera (Q2)内核:Trident,Gecko,Prest ...
- git涨姿势(一)
今天遇到了一个git冲突问题,解决冲突方案我是当然知道的,就是本地不知道何时自己傻不拉几的新建了一个relese分支,而remote是没有release分支的,需要拉取的是release/V1.4.2 ...
- java中的while循环和do while循环
那么在讲解循环之前呢我们先来了解一下什么是循环 生活中的例子 车子的轮胎他就是一直在循环 马拉松跑到也是在循环 因为运动员不停的一圈一圈在跑这也是一个循环 那么我们为什么要学习循环呢? 下面看一个 ...
- Flutter保持页面状态AutomaticKeepAliveClientMixin
使用bottomNavigationBar切换底部tab,再切换回来就会丢失之前的状态(重新渲染列表,丢失滚动条位置). 解决方法 使用 AutomaticKeepAliveClientMixin 重 ...