c# - Selenium webdriver 测试 100% 在本地通过,在 VSTS 服务器上 100% 失败
问题描述
目前在我试图弄清楚为什么某个测试在本地完美运行但在被 VSTS 代理启动时失败的第二周。
程序流程:
- 从表中选择一行
- 单击验证按钮
- CSS覆盖使屏幕变暗,中间有微调器
- 烤面包机在左下角弹出说验证开始
- 大约 1.5 分钟的时间过去了,旋转器旋转
- 移除 CSS 覆盖
- 烤面包机弹出左下角,验证成功
我在每一步都有截图和调试输出,失败是在“等待 CSS 覆盖被删除”阶段。它超时等待它,现在不管超时多长时间。
屏幕截图显示,即使验证过程成功完成,CSS 叠加层和微调器仍在旋转。它几乎就像被时间卡住了一样。
场景和结果:
- 从本地 Visual Studio 运行 - PASS
- VSTS 代理 - 失败
- 通过远程输入并传递确切的命令行作为构建在 VSTS 代理上手动运行 - PASS(这让我很生气!!)
- 降级/升级 Webdriver - 没有区别
- 无头/完整模式 - 没有区别
- 使用不同类型的等待 - 没有区别
- 等待 Toaster 弹出窗口而不是 CSS - 没有区别
解决方案
文档中需要注意的一件事:
配置为作为服务运行的代理只能使用无头浏览器运行 Selenium 测试。如果您没有使用无头浏览器,或者如果您正在为桌面应用程序运行 UI 测试,则必须将 Windows 代理配置为作为启用自动登录的交互式进程运行。
您还尝试运行 Headless 的事实可能意味着即使您作为服务运行并且仍然出现错误,这可能不是您的问题。在某些情况下,我遇到了通过注销用户或更改屏幕分辨率来远程连接到机器的问题,从而扰乱了未来的测试运行或视频录制。文档继续介绍防止这种情况的方法:
如果您使用远程桌面通过自动登录访问运行代理的计算机,只需断开远程桌面的连接就会导致计算机被锁定,并且在此代理上运行的任何 UI 测试都可能失败。为避免这种情况,请在远程计算机上使用 tscon 命令断开与远程桌面的连接。例如:
%windir%\System32\tscon.exe 1 /dest:console
在此示例中,数字“1”是远程桌面会话的 ID。此数字可能会在远程会话之间发生变化,但可以在任务管理器中查看。或者,要自动查找当前会话 ID,请创建一个包含以下代码的批处理文件:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do ( %windir%\System32\tscon.exe %%s /dest:console )
保存批处理文件并为其创建桌面快捷方式,然后将快捷方式属性更改为“以管理员身份运行”。从此快捷方式运行批处理文件会断开与远程桌面的连接,但会保留 UI 会话并允许运行 UI 测试。
推荐阅读
- oracle - 在不同代码块pl sql中填充varray的最佳方法
- node.js - Node.js / Express:是否可以从同一模块为 2 个不同的路由创建 2 个单独的实例?
- mobile - Nuxtjs:将本地主机暴露给外部不起作用
- excel - Excel 公式:如果时间大于 23:30,则返回同一日期的 11:30
- android - 有什么方法可以从应用程序获取 Android Management API 设备 ID
- html - 如何在 snappy pdf 中分页后获取第二页中的哪些内容?
- javascript - 单击按钮1时如何隐藏div2并显示div1角度
- jquery - 如何在 javascript 类中使用 JQuery $(this)
- node.js - 从 Linux 安装时,npm 是否创建了 bin/*.cmd 文件?
- html - Bootstrap 导航栏下拉菜单是否与 github 中的 html 预览兼容?