【问题标题】:Xvfb is not hiding browser on macosXvfb 没有在 macOS 上隐藏浏览器
【发布时间】:2017-05-27 00:59:19
【问题描述】:

我需要在不显示浏览器的情况下运行 selenium 测试。 在 ubuntu 上,它按我的预期完美运行。但是在 mac OS(10.11 版)上:Xvfb 没有隐藏浏览器。

我在一个终端启动 Xvfb:

$ sudo Xvfb :1338
Password:
Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
[dix] Could not init font path element /System/Library/Fonts, removing from list!

在第二个终端中,我使用DISPLAY env var 运行 selenium 独立服务器(在工作目录中有 chromedriver):

$ DISPLAY=:1338 /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/bin/java -jar ~/selenium-server-standalone-3.4.0.jar
19:27:25.021 INFO - Selenium build info: version: '3.4.0', revision: 'unknown'
19:27:25.022 INFO - Launching a standalone Selenium Server
2017-05-26 19:27:25.056:INFO::main: Logging initialized @311ms to org.seleniumhq.jetty9.util.log.StdErrLog
19:27:25.165 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
 registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform MAC
19:27:25.166 INFO - Driver provider org.openqa.selenium.edge.EdgeDriver registration is skipped:
 registration capabilities Capabilities [{browserName=MicrosoftEdge, version=, platform=WINDOWS}] does not match the current platform MAC
19:27:25.166 INFO - Driver class not found: com.opera.core.systems.OperaDriver
19:27:25.166 INFO - Driver provider com.opera.core.systems.OperaDriver registration is skipped:
Unable to create new instances on this machine.
19:27:25.166 INFO - Driver class not found: com.opera.core.systems.OperaDriver
19:27:25.167 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered
2017-05-26 19:27:25.247:INFO:osjs.Server:main: jetty-9.4.3.v20170317
2017-05-26 19:27:25.304:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@68be2bc2{/,null,AVAILABLE}
2017-05-26 19:27:25.343:INFO:osjs.AbstractConnector:main: Started ServerConnector@42d80b78{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
2017-05-26 19:27:25.344:INFO:osjs.Server:main: Started @600ms
19:27:25.344 INFO - Selenium Server is up and running

然后在第三个终端,我运行 Selenium 测试:

go run chrome.go

有内容:

// Run some code on play.golang.org and display the result
package main

import (
    "fmt"
    "time"

    "github.com/tebeka/selenium"
)

var code = `
package main
import "fmt"

func main() {
    fmt.Println("Hello WebDriver!\n")
}
`

// Errors are ignored for brevity.

func main() {
    // FireFox driver without specific version
    // *** Add gecko driver here if necessary (see notes above.) ***
    caps := selenium.Capabilities{
        "browserName": "chrome",
    }
    wd, err := selenium.NewRemote(caps, "")
    if err != nil {
        panic(err)
        return
    }
    defer wd.Quit()

    // Get simple playground interface
    wd.Get("http://play.golang.org/?simple=1")

    // Enter code in textarea
    elem, _ := wd.FindElement(selenium.ByCSSSelector, "#code")
    elem.Clear()
    elem.SendKeys(code)

    // Click the run button
    btn, _ := wd.FindElement(selenium.ByCSSSelector, "#run")
    btn.Click()

    // Get the result
    div, _ := wd.FindElement(selenium.ByCSSSelector, "#output")

    output := ""
    // Wait for run to finish
    for {
        output, _ = div.Text()
        if output != "Waiting for remote server..." {
            break
        }
        time.Sleep(time.Millisecond * 100)
    }

    fmt.Printf("Got: %s\n", output)
}

并且有输出:

Got: Hello WebDriver!


Program exited.

我预计浏览器不会正常工作。但我看到浏览器。阅读 thisthis 对我没有帮助。

【问题讨论】:

    标签: macos selenium xvfb


    【解决方案1】:

    您可能没有使用基于 X11 的网络浏览器版本。 OSX 上的本机浏览器不使用 X11,因此不使用 $DISPLAY 并且不能在 xvfb 中运行。

    【讨论】:

    • xvfb 的任何可能的解决方案/替代方案?谢谢
    • @li.SQ:如果您要求的话,firefox 和 chrome 都可以在无头模式下使用。
    • 来自this issue
    • @li.SQ:现在对无头浏览器的支持比 2017 年要好得多。
    • 我和链接的帖子有同样的问题。无头模式看似会隐藏 chrome 浏览器,但实际上无法访问网页。根据顶级解决方案尝试了 xvfb,尽管它仍然无法正常工作,因此评论了这篇 3 岁的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多