如何在docker容器中启动宽浏览器,进行Protractor测试

时间:2015-05-12 07:45:19

标签: docker protractor xvfb

在docker容器中运行端到端测试时,我们需要浏览器宽,以确保位于最右侧的元素(aButton)实际上是可见的并且像

一样进行测试
expect(mainPage.aButton.isDisplayed()).toBeTruthy();

成功。

显示浏览器宽度时,我们总是得到一个接近1050的值:

browser.driver.manage().window().getSize().then(function(size) {
    console.log('browser size', size);
});

显示:

browser size { height: 748,
               width: 1050,
               class: 'org.openqa.selenium.Dimension',
               hCode: 436207616 }

当使用这两个泊坞窗图像来运行测试时,它们会因为按钮不可见而失败。在不在Docker / Xvfb内部的浏览器上运行测试时没有问题。

https://registry.hub.docker.com/u/caltha/protractor/

通过链接这样的本地版本(以及一些用于调试的日志文件夹)来修改Xvfb配置的设置。

mkdir -p /tmp/docker/protractor/supervisor
docker run --rm  \
--name run_protractor \
-v /tmp/docker/protractor:/var/log \
-v /tmp/testproject:/project \  
-v /tmp/xvfb.conf:/etc/supervisor/conf.d/xvfb.conf:ro \
caltha/protractor

Xvfb设置xvfb.conf的文件:

[program:xvfb]
command = Xvfb :1 -screen 0 1920x1080x16
stdout_logfile = /var/log/supervisor/%(program_name)s-out.log
stderr_logfile = /var/log/supervisor/%(program_name)s-err.log

在这个泊坞窗图片上运行相同的测试时,我们也会得到一个小小的'浏览器:

http://www.function.fr/docker-with-chrome-and-selenium-and-firefox/

更多信息: 我们开始所有的东西'用于集成/端到端测试的链接Docker容器,用于服务器的数据库容器,tomcat / rest / java容器。 和角网站的npm容器。

protractor.conf.js:

....
onPrepare: function() {    
  browser.driver.manage().window().maximize();
  //var width = 1224;
  //var height = 800;
  //browser.driver.manage().window().setSize(width, height);
}

我们如何获得广泛的浏览器? (我们显然没有为我们的网站使用响应式设计)

2 个答案:

答案 0 :(得分:1)

我不确定你的问题是在Docker,Protractor还是xvfb ......但是在Protractor方面,我会尝试设置一个特定的浏览器大小。 I.E.超出maximize()的尺寸可能会提供。

因此,请尝试在Protractor配置onPrepare中设置以下内容:

browser.manage().window().setSize(2024, 800); // or whatever

这个应该为您提供一个广泛的浏览器...不确定它是否会通过您的测试。

我也可以试试changing 'xvfb's resolution ...

答案 1 :(得分:1)

将以下内容添加到docker-compose.yml文件中:

chrome:
  image: selenium/node-chrome-debug
  environment:
    SCREEN_WIDTH: 1920
    SCREEN_HEIGHT: 1080
  ports:
    - 5900
  links:
    - seleniumhub:hub

如果您正在使用调试节点,那么您已完成。如果你不这样做,就不要害怕!最大化赢得了工作,但driver.manage().window().setSize(new Dimension(1920, 1080));会。