首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RemoteWebDriver -调试无头码头容器

RemoteWebDriver -调试无头码头容器
EN

Stack Overflow用户
提问于 2018-06-13 07:41:32
回答 2查看 2.2K关注 0票数 1

目前,我通过一个docker实例运行一个RemoteWebDriver,但是我很难调试它,因为浏览器没有打开,所以我可以在我的机器上看到它。

这里是创建驱动程序的代码--由于某种原因,它总是以无头模式运行。

代码语言:javascript
复制
public void createDriver() throws MalformedURLException {
    String browser = propertyReader.readProperty("browserType");
    String opSys = getOS();
    String remoteDriverURL = propertyReader.readProperty("remoteWebDriverLocation");

    if (Objects.equals(opSys, "win")) {
        switch (browser) {
            case "firefox":
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), firefoxCap);
                webDriver.manage().window().setSize(new Dimension(1600, 900));
            case "ie": {
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), ieCap);
                webDriver.manage().window().setSize(new Dimension(1600, 900));
                return;
            }
            case "headless":
                chromeCap.setCapability("headlesss", true);
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), chromeCap);
            default: {
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), chromeCap);
                webDriver.manage().window().setSize(new Dimension(1600, 900));
            }
        }
    } else {
        switch (browser) {
            case "firefox":
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), firefoxCap);
                webDriver.manage().window().setSize(new Dimension(1600, 900));
            case "safari":
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), safariCap);
                webDriver.manage().window().setSize(new Dimension(1600, 900));
            case "headless":
                chromeCap.setCapability("acceptInsecureCerts", true);
                chromeCap.setCapability("acceptSslCerts", true);
                chromeCap.setCapability("headless", true);
                chromeCap.setCapability("window-size=1920,1080", true);
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), chromeCap);
            default:
                this.webDriver = new RemoteWebDriver(new URL(remoteDriverURL), chromeCap);
                webDriver.manage().window().setSize(new Dimension(1600, 900));
        }
    }

}

有什么可以配置的吗?这样我们可以在运行时看到浏览器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-13 21:42:56

假设您正在运行selenium/hub、selenium/node、selenium/node,我就会这样做。这些是基于linux的映像。

如果您正在运行节点-chrome和节点-firefox,您希望将它们更改为节点-chrome-调试和节点-firefox-调试,这些版本与运行在端口5900上的VNC Server一起提供。我使用坞-撰写,并为这种类型的问题创建了一个单独的坞-撰写-调试type:

代码语言:javascript
复制
version: "3"
services:
  selenium-hub:
    image: selenium/hub
    container_name: selenium-hub
    ports:
      - "4444:4444"
  chrome:
    image: selenium/node-chrome-debug
    container_name: node-chrome-debug
    depends_on:
      - selenium-hub
    environment:
      - HUB_PORT_4444_TCP_ADDR=selenium-hub
      - HUB_PORT_4444_TCP_PORT=4444
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5901:5900"
  firefox:
    image: selenium/node-firefox-debug
    container_name: node-firefox-debug
    depends_on:
      - selenium-hub
    environment:
      - HUB_PORT_4444_TCP_ADDR=selenium-hub
      - HUB_PORT_4444_TCP_PORT=4444
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5902:5900"

注意:端口5901:5900和5902:5900,这些端口允许您使用VNC客户机连接到这些节点。

代码语言:javascript
复制
docker-compose -f docker-compose-debug.yml up

基本上,您的节点是无头的,但是它们仍然需要一些东西来模拟浏览器gui,在容器xvfb中为您处理这个问题。节点的调试版本运行一个连接到xvfb的VNC服务器。运行VNC客户端以连接到VNC服务器。

您将需要一个VNC客户端,一个流行的版本是RealVNC,下载并安装在您的机器上。把它放在你喜欢的地方,让它可执行并运行它。我叫我的vncview

代码语言:javascript
复制
>./vncview

这将启动一个gui,您将为要查看的节点提供一个ip:端口。例如127.0.0.1:5901 (我的铬调试)或127.0.0.1:5902 (我的ff调试)密码是“机密”--您将看到ubuntu徽标。您可以同时运行其中的两个,因为我们已经分配了不同的端口。

现在只运行你的测试;-)

我编辑了这个答案,包括以下内容:

Chrome有能力通过使用-无头选项实现完全无头,您已经使用了此选项。

Selenium映像默认运行“无头”,容器没有显示,xvfb用于处理此问题。Xvfb通过创建/使用一个从未显示的显示缓冲区来伪造ui。

在节点上运行无头铬,不会导致任何发送到xvfb。因此,如果您稍后想看看正在发生什么仅仅是为了调试,您不能。

您将需要删除-无头选项。这并不是一场灾难,因为停靠器selenium/ not图像默认为“本质上”无头。我不知道在码头的形象上使用-是否节省了时间。

另见:

开始使用无头铬

带码头的硒格网 -有很多图形的细节

docker-selenium调试

在码头容器中运行Chrome

Goolge术语: XVNC或VNC(虚拟网络计算)和XVFB (x虚拟帧缓冲区)

票数 2
EN

Stack Overflow用户

发布于 2018-06-13 12:10:30

对接器映像是以这种方式配置的,它使用虚拟帧缓冲区。但是,您可以告诉selenium随时拍摄截图,然后可以将它们保存到文件中。

为什么要使用RemoteWebDriver而不是普通的?如果希望看到浏览器正在运行,请使用常规的WebDriver或在停靠器外配置Selenium。您可以检查Dockerfile以查看如何配置它。

问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50831631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档