【问题标题】:PHPUnit Selenium Xvfb CentosPHPUnit Selenium Xvfb Centos
【发布时间】:2016-07-26 00:45:34
【问题描述】:

我正在尝试使用 Selenium Web 服务器和 Phpunit 在我的 Centos 服务器上设置功能测试。

当我运行测试时,命令行中出现错误:

PHPUnit_Extensions_Selenium2TestCase_WebDriverException: 
Unable to connect to host vmdev-pando-56 on port 7055 after 45000 ms. 
Firefox console output: Error: no display specified

我已经进行了三天多的研究,但找不到解决方案。我阅读了很多帖子,包括 SOverflow。据我了解,一切都已正确设置,但我遇到了与许多其他人相同的问题,并且对他们有用的解决方案似乎对我不起作用。

这是我的设置:

  1. 操作系统:Centos 6.5 x86 在命令行中(无 GUI)
  2. PHP:5.6
  3. Phpunit:3.7,虽然我也尝试过使用5.3
  4. Selenium 独立网络服务器:2.53,从here 下载,虽然我也尝试使用2.9
  5. Xvfb系统:xorg-x11-server-Xvfb
  6. Firefox:38.0.1,虽然我也尝试过使用38.7

我还在我的 bash 个人资料中将 DISPLAY 设置为 :99

这是我设置环境的方法:

  1. 首先,我启动Xvfb系统:/usr/bin/Xvfb :99 -ac -screen 0 1280x1024x24 &
  2. 然后我启动 Selenium 服务器:/usr/bin/java -jar /usr/lib/selenium/selenium-server-standalone-2.53.0.jar &
  3. 我启动 Firefox:firefox &(虽然我知道这不是必需的,但以防万一)

这三个进程都在后台运行。

此时,我知道 Firefox 和 X 缓冲区都在运行。我可以运行命令firefox http://www.stackoverflow.com &,然后通过执行import -window root /tmp/buffer_snapshot.png 对缓冲区进行快照,这恰好是这样的:

我当然在终端收到了警告:Xlib: extension "RANDR" missing on display ":99",但我读了无数遍,这不是问题。

不管怎样,问题才刚刚开始。

我编写了一个相当简单的功能测试(请注意,我编写的其他测试不是功能测试,它们工作得很好,所以这方面的环境似乎配置正确):

<?php
    namespace My\APP\BUNDLE\Tests\Functional\MyTest;

    use PHPUnit_Extensions_Selenium2TestCase;

    class HelloWorldTest extends PHPUnit_Extensions_Selenium2TestCase {

    protected function setUp() {        
        $this->setBrowser('firefox');
        $this->setHost('localhost');
        $this->setPort(4444);
        $this->setBrowserUrl('http://www.stackoverflow.com');   
    }

    public function testTitle() {
        $this->url('/');
        $this->assertEquals("1", "1");
    }
}

当我通过发出 phpunit HelloWorldTest.php 运行测试时,我收到以下错误:

PHPUnit_Extensions_Selenium2TestCase_WebDriverException: 
Unable to connect to host vmdev-pando-56 on port 7055 
    after 45000 ms. Firefox console output:
Error: no display specified

检查 selenium 生成的日志文件,我发现以下(有趣的)行:

21:55:46.135 INFO - Creating a new session for Capabilities [{browserName=firefox}]

[...]

java.util.concurrent.ExecutionException:
org.openqa.selenium.WebDriverException:
java.lang.reflect.InvocationTargetException
    Build info: version: '2.53.0', 
    revision: '35ae25b', 
    time: '2016-03-15 17:00:58'
System info: host: 'vmdev-pando-56', 
    ip: '127.0.0.1', 
    os.name: 'Linux', 
    os.arch: 'i386', 
    os.version: '2.6.32-431.el6.i686', 
    java.version: '1.7.0_99'
Driver info: driver.version: unknown

[...]

(该文件包含完整的堆栈跟踪转储,以及 no display specified 的原始消息)

Xvfb 日志文件中没有错误。

此时我不知道自己做错了什么。

谁能帮忙?

非常感谢

【问题讨论】:

  • 另外,忘了说我在虚拟机(VMWare 7)中运行我的开发环境

标签: php selenium webdriver phpunit xvfb


【解决方案1】:

无法连接错误的一个原因是 Selenium Server 的版本不知道如何与您安装的 Firefox 版本一起工作。 Selenium 独立 Web 服务器 2.53 是最新最好的。 selenium-firefox-driver 也是 2.53。 Firefox 版本 38 旧。我正在使用 selenium 2.53 运行 firefox 45.0.1。

【讨论】:

  • 谢谢。这是否意味着我必须安装另一个名为selenium-firefox-driver 的库?此外,在 PHPUnit 官方网页中,他们引用了“Standalone Selenium Server”,版本 2.9。这是否意味着该文档中可能存在错误?问候。
  • 当你安装 selenium 时,你应该已经得到了 firefox 驱动程序;检查你的 pom.xml。您可以卸载/重新安装以获取 selenium 2.9。那不会是我的第一选择。您必须谷歌哪个版本的 Firefox 浏览器支持 2.9(我不记得了)。
  • 嗨,迈克,我已经有了你推荐的版本 (2.53)。但我没有任何 pom.xml。我的项目是 PHP 的,而 pom.xml 似乎用于 Ruby 或 Python 项目。它实际上适用于php项目吗?干杯。
  • pom.xml 是 Maven。 Maven 的存在正是为了管理许多依赖项。自己管理它们……很难。 Maven 是为支持 java 而开发的,但它支持大多数东西。您使用 IDE(例如 Eclipse)吗?
  • 嗨,迈克。不,我使用 Composer 来管理我的依赖项,并使用 PHPStorm 作为 IDE。问候。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 2013-12-19
  • 1970-01-01
  • 2011-10-18
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多