【问题标题】:Div visible in headed Chrome, invisible in headless ChromeDiv 在有头 Chrome 中可见,在无头 Chrome 中不可见
【发布时间】:2017-11-02 10:09:58
【问题描述】:

我正在尝试在 Katalon Studio 中测试我们软件的登录页面(它使用 Selenium),而无头 Chrome 不会呈现显示欢迎消息的 iframe。WebUI.verifyElementVisible 失败,而 WebUI.verifyElementPresent 成功。屏幕截图也没有显示。 Headed Chrome 可以毫无问题地运行测试。

当我在无头模式下从命令行运行 Chrome 时,其 --dump-dom 选项会产生截断的输出,但我可以看到 iframe 的 div 容器是不可见的:

<div id="Div_AlertWin" style="position:absolute;display:none" onclose="fnLoginUnloadAlert()">

当我在带头的 Chrome 中检查它时,它是可见的,

<div id="Div_AlertWin" style="position: absolute; display: block; left: 183.5px; top: 218.5px;" onclose="fnLoginUnloadAlert()">

看起来像是启动 JS 脚本之一显示 div 在无头 Chrome 中无法正确运行。如何调试它的 JS 执行?我不能使用--remote-debugging-port,因为公司防火墙阻止了appspot。

【问题讨论】:

    标签: google-chrome selenium selenium-chromedriver google-chrome-headless katalon-studio


    【解决方案1】:

    根据您提供的 HTML,Normal Chrome Browser 呈现 HTML DOM 如下:

    <div id="Div_AlertWin" style="position: absolute; display: block; left: 183.5px; top: 218.5px;" onclose="fnLoginUnloadAlert()">
    

    Headless Chrome BrowserHTML DOM 呈现如下:

    <div id="Div_AlertWin" style="position:absolute;display:none" onclose="fnLoginUnloadAlert()">
    

    所以这里我们需要更改为style="position:absolute;display:block",然后他们找到/定位/搜索WebElement,如下所示:

    ((JavascriptExecutor)driver).executeScript("document.getElementById('Div_AlertWin').style.display='block';");
    WebElement element = driver.findElement(By.id("Div_AlertWin"));
    

    【讨论】:

    • 但它为什么要这样做呢?有一个JS脚本改变了onload触发的元素的样式,我怎样才能找出它为什么不能在headless中正确运行?
    • @Alexey 如果您能确认我的解决方案适合您,我可以解释一下我提供的解决方案及其工作原理。
    • 我要到 13 号才能测试它。到时候我会回复你的。
    • @Alexey 你测试了吗?
    • 我切换到了具有无头 Firefox 的 Katalon 的更新版本,没有出现错误。
    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2012-09-25
    相关资源
    最近更新 更多