Selenium 测试在本地工作但在 Jenkins 中失败

2023-11-29

在工作中,我们为我们的一个应用程序提供了一个自动化套件,该套件设置为在每次提交到 master/部署到产品时运行,并且很长一段时间以来,我们一直在尝试使其足够可靠。

测试在 Jenkins 中运行,使用 Selenium webDriver + Chrome + xvfb 作为显示服务器。我们知道测试是有效的,因为如果我们在笔记本电脑上本地运行它们(我和两个朋友已经尝试过),它们每次都会完美运行,但会失败almost每次在詹金斯。这almost是关键字,因为它们在那里也起作用......大约每 5 次一次。

当他们失败时,他们并不总是在同一个地方失败。有时是等待元素时超时,有时测试最终会出现一个本来不应该到达的错误页面,我不知道它是如何到达那里的......所以是的,这很令人沮丧。

我们尝试了很多不同的方法来调试它。重写每个测试的设置,以确保在每个测试结束时所有内容都被清除,以便下一个测试以干净的工作区/缓存开始,从而使 Selenium 在每次无法看到发生了什么时都会截取屏幕截图,尝试过不同版本的 chromedriver/chrome/selenium,将测试连续运行几次以查看是否有任何模式......并且由于我已经没有想法了,所以我想我可以在这里问!

有什么方法可以设置 Selenium 驱动程序来记录整个流程,而不是只是到处截图?我希望能够观看 Jenkins 中运行的测试,但我不知道这是否可能或如何做到。

测试使用Java7 + Spring + TestNG 6.8.1 + Selenium 2.45.0 + XVFB作为显示服务器。

关于我可以尝试什么的任何想法或提示?


阅读您尝试过的所有解决方案,我几乎可以肯定您使用虚拟机 (VM) 来执行 Selenium 测试。表明这一点的事实主要是:

当他们失败时,他们并不总是在同一个地方失败。有时是等待元素时超时,有时测试最终会出现一个本来不应该到达的错误页面,我不知道它是如何到达那里的......

我已经和同样的问题斗争了两年多了,相信我,我知道

是的,这很令人沮丧。

虚拟机的主要问题是它们没有正确的渲染功能,并且无论它们的 CPU 和 RAM 有多大,它们最终都无法重现您的本地(或任何物理)显卡。当您尝试并行运行所有测试时,事情会变得非常糟糕。例如,我的团队实际上无法在具有 12 GB RAM 的虚拟机上运行 4 个以上的浏览器!?!我的 8 GB easy 笔记本电脑可以运行 15 个浏览器,同时我可以继续做日常工作。所以底线:Selenium 驱动程序和浏览器之间的同步是问题所在。每次都不同,具体取决于渲染速度。

有什么方法可以设置 Selenium 驱动程序来记录整个流程,而不是只是到处截图?

实际上有几种方法。但保持简单 - 使用第二个线程,每 5 秒(或您的服务器可以跟上的尽可能多的时间)进行一次扫描,并将它们保存在每个测试的文件夹中。但出于性能原因,我建议使用Queue并只保留最后 12 个(最后一分钟)。

UPDATE:

我已经在片状测试中扩展了所有这些博客文章.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium 测试在本地工作但在 Jenkins 中失败 的相关文章

  • 在java中将RFC3339 DateTime转换为Date [重复]

    这个问题在这里已经有答案了 如何转换RFC 3339 https www rfc editor org rfc rfc3339java 中的 com google api client util DateTime 到 DateTime 例如
  • java本地时间格式不带年份

    我喜欢将本地时间格式格式化为不带年份的字符串 目前我可以显示包含年份的本地格式 java text DateFormat df java text DateFormat getDateInstance java text DateForma
  • 使用Java获取CSS文件中图像的URL?

    我正在尝试使用 Java 获取远程 CSS 文件中图像 所有 MIME 类型 的 URL 我正在使用 jsoup 来获取 css 的 URL 经过无数个小时的观看CSS解析器 http cssparser sourceforge net 由
  • IntelliJ Ultimate 在 Play 2.3 (Java) 项目测试中找不到路由

    虽然我的测试运行得很好 但 IntelliJ 抱怨它找不到路由对象 并且代码自动完成无法工作 我已经查看了所有文档 这应该可以工作 这是 IntelliJ 的报告内容 关于我的项目配置可能有什么问题有什么想法吗 这很可能与以下事实有关 ro
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • @Cachable 在没有输入参数的方法上?

    我有问题 org springframework cache annotation Cachable注解 Bean public ConcurrentMapCache cache return new ConcurrentMapCache
  • 如何使 ScheduledExecutorService 在计划任务取消时自动终止

    我正在使用一个ScheduledExecutorService如果网络连接已打开超过几个小时 则关闭该连接 然而 在大多数情况下 网络连接在超时之前就关闭了 所以我取消了ScheduledFuture 在这种情况下 我还希望执行程序服务终止
  • 在 JavaFX 中更改 ListView 字体大小

    我想知道如何更改 JavaFx 中的列表视图项目文本字体大小 每行文本的大小会有所不同 我尝试使用细胞因子属性 但我不知道如何使用它 有人可以帮我吗 类似的问题在这里 如何更改JavaFX中ListView的字体大小 https stack
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • 如何使用键盘上的“删除”按钮作为从 JTable 中删除行的快捷方式[重复]

    这个问题在这里已经有答案了 可能的重复 如何制作删除按钮来删除JTable中的行 https stackoverflow com questions 13236206 how to make delete button to delete
  • 读取不失真的灰度 PNG 图像文件

    我需要读取和处理大量的灰度 PNG 文件 我的意思是 如果它们在 Photoshop 或 GIMP 中打开 则图像模式为灰度 而不是具有灰度值的 RGB 图像 ImageIO 似乎没有实现这一点 它似乎将所有图像文件视为 sRGB 这会破坏
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • Java 应用程序启动,ProcessBuilder 一段时间后被阻止

    我正在开发一个 Java 桌面应用程序 我们称之为控制台 包含 3 个按钮 其中两个启动 Win32 应用程序 第三个应该启动一个可执行的 jar ProcessBuilder pb new ProcessBuilder java jar
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 在java中打印阿拉伯字符串

    我试图在 java 中显示阿拉伯语文本 但它显示垃圾字符 示例 或有时在我打印时仅显示问号 我如何才能打印阿拉伯语 我听说它与unicode和UTF 8有关 这是我第一次使用语言 所以不知道 我正在使用 Eclipse Indigo IDE
  • 将 JSON 发送到 Spring MVC 控制器

    我正在尝试将 JSON 发送到 Spring MVC 控制器 在 Spring MVC 方面 一切都配置正确 下面是代码 但似乎没有运行

随机推荐

  • 从 URL 获取图像无法解码流:fileNotFoundException

    我知道这个问题已经被问过很多次了 但我尝试了很多解决方案 但没有一个有效 在 Android 上 我尝试从 URL 获取图像并将其放入图像视图中 不幸的是 我收到以下错误 E BitmapFactory Unable to decode s
  • 什么是 LD_LIBRARY_PATH 以及如何使用它?

    我参与开发一个Java项目 其中使用了一些C 组件 因此我需要Jacob dll 在 Windows 7 上 我不断得到java lang UnsatisfiedLinkError no JacobDB in java library pa
  • 通过代码添加的 Android 复选框外观不正确?

    我有一个非常基本的应用程序 我试图在其中插入动态复选框 并且可以让它们出现 但它们没有以正确的样式显示 参见下文 Foo 根据定义位于 LinearLayout 中 正在以编程方式添加栏 Foo 显示为灰色框 用于检查 Bar 显示为白色框
  • 获取此格式的日期时间并转换为 4 字节十六进制

    我有一个这种格式的日期时间 1999 12 31 09 00 00 来自十六进制值 F0C46C38 如何将上述格式的日期时间值转换为 4 字节十六进制 我上面发布的价值观是相互补充的 第二个代码块中的十六进制被反转 谢谢你 386CC4F
  • Cassandra 0.7 二级索引如何存储?

    我们一直在使用 Cassandra 0 6 现在拥有包含数百万个键的列族 我们有兴趣使用 0 7 中提供的新二级索引功能 但找不到任何有关如何存储新索引的文档 是否存在任何磁盘空间限制 或者索引的存储方式是否与键类似 因为它分布在多个节点上
  • magic_quotes_gpc() 的解药?

    我见过很多这样的 PHP 片段 function DB Quote string if get magic quotes gpc true string stripslashes string return mysql real escap
  • 无法加载 Rails 样式表中的语义 UI。解析值时出现很多错误

    我正在开发一个使用 Semantic UI 作为前端框架的 Rails 应用程序 我正在使用 Rails 5 我按照该网站上的说明进行操作 https github com Semantic Org Semantic UI Rails LE
  • 如何使用谷歌应用程序脚本洗牌每隔一列?

    如果 C 是 4 我想使用 google apps 脚本随机化 D E F G H I J K At the moment I use this inefficient time consuming code function shuffl
  • 使用多个命令的 Python paramiko 模块

    我有一个创建连接的类 我可以在通道关闭之前连接并执行 1 个命令 在另一个系统上 我可以执行多个命令 并且通道不会关闭 显然 这是我尝试连接的系统的配置问题 class connect newconnection def init self
  • Linux下如何给进程分配更多内存

    我正在 64 位 Fedora 16 上使用 CAD 程序 有一次该程序突然崩溃并完全退出 我最初的猜测是没有足够的内存可供该程序执行该操作 并且它退出了 为了测试它 我想为该特定程序分配更多内存 这样做时 如果其他程序没有足够的内存 我也
  • 处理“大量”数据时的 WinForms UI 响应能力

    我正在修改一个 Windows 窗体 以允许在后台加载数据 同时 UI 保持响应 数据的检索和绑定都需要相当长的时间 理想情况下 我会在后台执行这两项操作 但是对于我应该在后台执行哪种 UI 更新 如在主线程之外 存在一些模糊性 一个在后台
  • C++ 中的字符串没有越界异常/错误吗? [复制]

    这个问题在这里已经有答案了 string p a cout lt
  • 从 asp.net core api 添加用户声明到 firebase auth

    给定一个 asp net core api 和仅使用 Authorize 属性的工作 firebase 身份验证 如何将自定义声明添加到令牌以使用 Authorize Policy admin 管理 SDK 仅适用于 Node js Jav
  • 创建一种通过网络发送整数的有效方法。传输控制协议

    如何将整数值转换为字节数组 然后通过字节流将它们发送到客户端程序 客户端程序将字节数组转换回整数 我的程序是乒乓球游戏 运行后 它会创建一个服务器 客户端使用对象流通过互联网连接到该服务器现在 一切都运转良好 但似乎效率不高 我的意思是 当
  • 如何检查 Javascript 数组中是否存在多个值

    所以 我正在使用 Jquery 并有两个具有多个值的数组 我想检查是否all第一个数组中的值存在于第二个数组中 例如 例1 数组 A 包含以下值 34 78 89 数组 B 包含以下值 78 67 34 99 56 89 这将返回true
  • 带有伪元素之前的 Z 索引

    我创建了一个带有 before pseudo 元素的 header 元素 伪元素必须位于父元素后面 一切都工作得很好 直到我给我的 标题 一个 z 索引 我想要的 前景中的黄色 标题 背景中的红色伪元素以及黄色 标题 元素上的简单 z 索引
  • 对 IText 7 中的所有 PDF 页面使用单一模板

    我有以下内容PDF模板这对于所有的应该是一致的pages添加到我正在创建的 PDF 中 问题是 我只得到这个模板Page 1仅适用于其余页面空白模板已使用 这是现在正在使用的代码 PdfDocument pdfDoc new PdfDocu
  • 在 Java 中对从数据库检索的一小部分数据执行连接操作。 (上下文:网络应用程序)

    在 Web 应用程序的上下文中 是否适合在 Java 中对从数据库检索的数据 从第一个查询 执行一些 JOIN 操作 并使用该 JOIN 数据进行第二个也是最后一个数据库查询以获得所需的数据 Java 是否为此类实现提供任何内置机制 或者实
  • Laravel 5.2 通过 API 进行身份验证

    我正在使用 Laravel 5 2 开发 RESTful API 在令牌守卫中位于 Illuminate Auth TokenGuard TokenGuard php在第 46 行 标记的列名称定义为api token this gt st
  • Selenium 测试在本地工作但在 Jenkins 中失败

    在工作中 我们为我们的一个应用程序提供了一个自动化套件 该套件设置为在每次提交到 master 部署到产品时运行 并且很长一段时间以来 我们一直在尝试使其足够可靠 测试在 Jenkins 中运行 使用 Selenium webDriver