本周我们的讨论话题是关于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做自动化碰到了哪些坑?都是怎么解决的?的更多相关文章

  1. selenium做UI自动化时,模拟鼠标各种操作的ActionChains的用法

    1.selenium做自动化的时候,需要模拟鼠标进行单击.双击.右键.拖拽等操作,selenium提供了ActionChains类来进行处理. 2.执行原理:当你调用ActionChains的方法时, ...

  2. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  3. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

  4. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  5. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作  1.1 用webdriver打开一个浏览器  1.2 最大化浏览器&关闭浏览器 ...

  6. Selenium Web 自动化 - 项目实战环境准备

    Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG  1.1 安装TestNG  1.2 添加TestNG类库2 部署Maven  2.1 mav ...

  7. Selenium Web 自动化 - 项目实战(一)

    Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...

  8. selenium+python自动化处理时间控件

    尝试编写12306网站查询余票信息的自动化脚本时,碰到日期选择的问题,此处做一下记录:

  9. RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)

    好久没有继续分享关于自动化测试相关的东西了,自动化在现今的测试领域已经越来越重要了,大部分公司在测试岗位招聘中都需要会相关的自动化测试知识.而 RobotFramework自动化测试框架 是自动化测试 ...

随机推荐

  1. Seata-一站式分布式事务解决方案

    Fescar 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案. F ...

  2. AI:是猫还是狗,这是个问题

    如果你不喜欢小猫和小狗,你可能不知道他们具体是哪一种品种,但是一般来说,你都能区分出这是猫还是狗,猫和狗的特征还是不一样的,那我们如何用机器学习的方法训练一个网络区分猫狗呢? 我们选用的是 Kaggl ...

  3. USB小白学习之路(3) 通过自定义请求存取外部RAM

    通过自定义请求存取外部RAM 1. 实验简述 此实验是对自定义的供应商特殊命令(vendor specific command bRequest = 0xA3)进行解析,程序中的read me说明如下 ...

  4. nginx 命令行参数 启动 重启 重载 停止

    今天和大家分享关于 nginx 的一些参数使用 首先,你应该安装了nginx CentOS 安装 nginx 这是很早之前的一篇博客,可以参考. 之前,我们如何去操作 nginx ##简单粗暴法 pk ...

  5. 初识 “HTML”

    HTML 什么是HTML? ①全称:超文本标记语言②超文本:在普通的文本内容的基础上添加超链接.图片.视频等③标记语言:HTML提供一系列标签④版本:HTML 4.01 HTML声明 1.编码格式:H ...

  6. CSS-水平居中、垂直居中、水平垂直居中

    1.水平居中 水平居中可分为行内元素水平居中和块级元素水平居中 1.1 行内元素水平居中 这里行内元素是指文本text.图像img.按钮超链接等,只需给父元素设置text-align:center即可 ...

  7. PySide2的This application failed to start because no Qt platform plugin could be initialized解决方式

    解决PySide2的This application failed to start because no Qt platform plugin could be initialized问题 今天在装 ...

  8. Redis(十一):哨兵模式架构设计分析

    业务最初的应用场景中,我们也许使用单机redis就可以应付业务要求,但并非一直可行. 比如单机的读写能力问题,单机的可用性问题,单机的数据安全性问题.这些都是许多互联网应用经常会遇到的问题,也基本上都 ...

  9. 转pdf

    一.转印厂pdf(书本类及折页类) 1.储存为(Ctrl+Shift+S) 2.保存类型选择   pdf 3.常规==>Adobe PDF预设==>选择印刷质量 4.选择标记和出血==&g ...

  10. Generator的异步编程

    对比下常用的异步处理的方案: 1,回调 我们常说的 “回调地狱”,就是多个异步操作时候,代码多重嵌套,异步之前形成强耦合,如果修改一处,其他地方也是跟着修改.(callback hell). 2,pr ...