本周我们的讨论话题是关于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. Python爬虫-百度模拟登录(二)

    上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...

  2. Linux系统发行版本及其区别

    1 Linux系统组成 Linux操作系统=Linux内核+GNU软件及系统软件+必要的应用程序.下表为Linux系统各组成部分的贡献人员: Linux内核 GNU组件(gcc.bash) 其他必要应 ...

  3. 安装Kubernetes集群时遇到的问题及解决方法

    在搭建Kubernetes集群时遇到一些问题,记录在这里. 搭建过程在另一篇文章:VirtualBox上使用kubeadm安装Kubernetes集群 1. 虚拟机安装完CentOS7登录时遇到war ...

  4. ORACLE数据库实现主键自增

    ORACLE数据库是甲骨文公司的一款关系数据库管理系统. 实现主键自动增长需要四个步骤: 去看 创建表格 去看 创建自增序列 去看 创建触发器 去看 插入测试 1.创建表格(必须有主键) -- 创建学 ...

  5. Java面试必问之Hashmap底层实现原理(JDK1.8)

    1. 前言 上一篇从源码方面了解了JDK1.7中Hashmap的实现原理,可以看到其源码相对还是比较简单的.本篇笔者和大家一起学习下JDK1.8下Hashmap的实现.JDK1.8中对Hashmap做 ...

  6. 一篇带你看懂Flutter叠加组件Stack

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Stack Stack组件可以将子组件叠加显示,根据子组件 ...

  7. MVC07

    1. 讲解ASP.net MVC的I/O操作 新建一个控制台程序,输入代码如下 using System; using System.IO; namespace IO { class Program ...

  8. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)

    A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...

  9. Java8 新特性2——强大的Stream API

    强大的Stream API Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.简而言之,Stream API 提供 ...

  10. 基于Modelsim的直方图统计算法仿真

    一.前言 本篇主要针对牟新刚编著<基于FPGA的数字图像处理及应用>第六章第五节中直方图统计相关类容进行总结,包括代码实现及 基于Modelsim的仿真.书读百遍,其意自现. 2020-0 ...