如何在使用 Selenium 自动执行测试时处理在调试器中暂停的覆盖

Posted

技术标签:

【中文标题】如何在使用 Selenium 自动执行测试时处理在调试器中暂停的覆盖【英文标题】:How to deal with the overlay Paused in debugger while automated test execution using Selenium 【发布时间】:2019-10-25 11:48:02 【问题描述】:

每次我尝试访问此 website 并打开 google-chrome-devtools 时,我都无法通过 Inspector 检查任何元素,因为 UI 有一个叠加层以及一条消息 Paused in debugger .

upvoted and accepted answer of this discussion 说要检查 Source 选项卡,检查 Event Listener Breakpoints 面板下是否在“Mouse”下设置了任何断点。我已经交叉检查了没有设置 Sources -> EventListenerBreakpoint

upvoted and accepted answer of this discussion 表示要检查小八角形停止/暂停标志(位于 Chrome“Sources”的左下方)是否着色(蓝色或紫色)。我不知道为什么我需要为选定的网站额外执行此操作。

快照:

upvoted and accepted answer of this discussion 谈到了手动步骤

所有解决方案似乎都指向手动过程。但在我看来,这个问题是Selenium 无法getPageSource() 背后的根本原因。

代码试验:

System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");

输出:Chrome 会打开,但没有导航到 url。

所以我的问题是:

什么情况下会出现Paused in debugger错误? 是前端开发的错误吗? 如何通过 SeleniumAutomated Tests 期间绕过此错误?

【问题讨论】:

我用过--headless...可能和个人资料有关... 特意添加了Pause,以防止您在打开 Devtool 后分析页面中的脚本。这不是错误,也不会影响通过 Selenium 执行。 请注意,页面中的脚本在加载 Selenium 时会重定向到不同的内容,很可能是通过指纹识别。 【参考方案1】:

在哪些情况下会出现Paused in debugger 错误?

无论何时您在打开开发工具的情况下访问此页面。 debugger; 行将暂停 javascript 执行,但如果开发工具关闭,浏览器将忽略它。

是前端开发的错误吗?

在这种情况下,不,他们是故意将您拒之门外。此功能的目的是暂停执行,然后在恢复时间超过 100 毫秒时将您的浏览器重定向到不同的页面。我推测这是为了干扰像 selenium 这样的自动爬虫,因为普通用户不会受到影响,而人类开发人员可以绕过它。

如何在通过 Selenium 进行自动化测试期间绕过此错误?

如果可以的话,我的第一个建议是尝试无头运行 Selenium。如果没有,使用热键恢复执行 (F8)。 您可以使用任何您喜欢的方法来生成按键;使用 java.awt 包,它看起来像这样:

Robot robot = null;
try

   robot = new Robot();

catch(Exception e)

   //handle failure

robot.keyPress(KeyEvent.VK_F8);

请记住,您必须在 100 毫秒内触发此操作,因此请使用您喜欢的任何逻辑来检测阻塞并快速响应。如果您只是想要一些快速而肮脏的东西,我会在一段时间内每隔 50 毫秒将其设为垃圾邮件 F8 按键,直到您确定页面已加载。

编辑:经过进一步调查,此页面非常混乱,并且对任何打开开发工具的人都充满敌意。触发debugger;的函数不止一个,而是几个函数,只要您在页面上,它们就会在计时器上重复调用。无头运行似乎是最佳选择,除非您想在整个会话中继续按 F8 发送垃圾邮件。

【讨论】:

你的回答不起作用,你能复制/粘贴完整的代码吗? @sgrillon => 为什么你认为这个答案行不通?按键事件 f8 不会发送到开发选项卡? 用F8,http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm总是白页 @sgrillon 没有 Selenium 对你有用吗?在切换到印度 *** 之前,我什至无法解析 DNS。 @AmitJain 您是否有机会使用 Selenium 加载此页面(打开开发工具)。在 .get 方法将句柄返回给脚本之前,您无法在 selenium 脚本中运行下一行代码,因此在这种情况下,您的脚本没有机会执行下一行代码(这将按下F8)。

以上是关于如何在使用 Selenium 自动执行测试时处理在调试器中暂停的覆盖的主要内容,如果未能解决你的问题,请参考以下文章

如何记录Selenium自动化测试过程中接口的调用信息

使用Selenium框架在做Web自动化测试时,如何处理弹出框?

如何提高自动化测试的执行效率 selenium java

python + selenium webdriver 自动化测试 之 环境异常处理 (持续更新)

Selenium 2自动化测试实战4(异常)

使用 JAVA 在 selenium 中执行测试的屏幕记录