使用Selenium自动执行测试时,如何处理调试器中暂停的叠加层

时间:2019-06-11 05:44:27

标签: javascript selenium debugging google-chrome-devtools breakpoints

每次我尝试访问此website并打开时,由于UI覆盖着消息 {{1},因此无法通过检查器检查任何元素}}

upvoted and accepted answer of this discussion说要检查“源”选项卡,请检查“事件侦听器断点”面板下的“鼠标”下是否设置了任何断点。我已经交叉检查了是否未设置Paused in debugger-> Sources

upvoted and accepted answer of this discussion说要检查八角形的小停止/暂停符号(在Chrome“来源”的左下角)是否为彩色(蓝色或紫色)。我不确定为什么需要对选定的网站另外进行此操作。

快照:

DebuggerPaused

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

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

代码试用:

getPageSource()

输出:Chrome打开,但不导航到该URL。

所以我的问题是:

  • 在哪种情况下会发生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"); 错误?
  • 前端开发是否出错?
  • 如何在自动测试中通过绕过此错误?

1 个答案:

答案 0 :(得分:7)

  • 在哪种情况下会发生Paused in debugger错误?

    任何时候您只要打开开发工具即可访问此页面。 debugger;行将暂停javascript执行,但是如果关闭开发工具,浏览器将忽略它。

  • 前端开发是否出错?

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

  • 如何在通过硒的自动测试过程中绕过此错误?

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

Robot robot = null;
try
{
   robot = new Robot();
}
catch(Exception e)
{
   //handle failure
}
robot.keyPress(KeyEvent.VK_F8);

请记住,您必须在100ms内触发此操作,因此请使用您喜欢的任何逻辑来检测该块并快速响应。如果您只想要快速又脏的东西,我会让它每隔50毫秒按F8键一次,直到您确定页面已加载为止。

编辑:在进一步调查中,此页面非常混乱,并且对任何打开了开发工具的人都怀有敌意。触发debugger;的函数不是一个,只有几个函数,只要您在页面上,它们就会在计时器上反复被调用。除非您想在整个会话期间继续向F8发送垃圾邮件,否则无头运行似乎是最好的选择。