我最近为一个相当复杂的项目写了很多硒1测试。它们都是用php编写的,可以在selenium-server 1.0.7上顺利运行。
显然,使用firefox 5(今天发布了6个)selenium server 1.0.7不再工作了。我试过了,但服务器只是打开空白窗口。
现在我试图让这些测试在selenium网格上运行。我设法使用网格v1获得一个集线器和几个远程控制runnnig,但他们只打开空白窗口,就像旧服务器一样。所以我想我需要升级到网格v2。
由于某种原因,我可以让客户端连接到集线器,但如果我尝试对集线器运行我的测试,它似乎根本无法连接(“PHPUnit_Framework_Exception:无法连接到Selenium RC服务器“)。我尝试在selenium独立服务器2.4.0上运行它们,这看起来确实有效。
我在一个论坛上看到,selenium grid 2与phpunit不兼容(但是?)。
如何让我的测试在网格上运行? phpunit连接到服务器缺少什么?我感谢任何帮助!
我按如下方式设置了集线器:
java -jar selenium-server-standalone-2.4.0.jar -role hub
还有两个奴隶:
java -jar selenium-server-standalone-2.4.0.jar -role rc -hub http://127.0.0.1:4444/grid/register -port 5555
java -jar selenium-server-standalone-2.4.0.jar -role webdriver -hub http://127.0.0.1:4444/grid/register -port 5556
在我看到网格控制台中的两个节点(http:// localhost:4444 / grid / console)时,一切似乎都在工作。
所以这是我在代码中进行的所有初始化:
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class Grid_Test extends PHPUnit_Extensions_SeleniumTestCase
{
public $captureScreenshotOnFailure = false;
public static $browsers = array(
'FFLinux' => array(
'name' => 'Firefox on Linux',
'browser' => '*firefox',
'host' => '127.0.0.1',
'port' => 4444,
'timeout' => 30000
));
public function setUp()
{
$this->setBrowserUrl('http://www.google.com');
}
public function testGridWorking()
{
$this->open('/');
$this->assertTrue(false);
}
}
此代码仍适用于独立服务器2.4.0。它按预期在最后一行失败。
在PHPUnit / Extentions / SeleniumTestCase / Driver.php中似乎抛出了异常。似乎有问题。
protected function doCommand($command, array $arguments = array())
{
$url = sprintf(
'http://%s:%s/selenium-server/driver/?cmd=%s',
$this->host,
$this->port,
urlencode($command)
);
[...]
$handle = @fopen($url, 'r', FALSE, $context);
if (!$handle) {
throw new PHPUnit_Framework_Exception(
'Could not connect to the Selenium RC server.'
);
}
[...]
}
当我在浏览器中请求http://localhost:4444/selenium-driver/driver时,我得到:
HTTP ERROR: 500
org.openqa.grid.internal.GridException: Session not available - []
RequestURI=/selenium-server/driver
知道怎么解决这个问题吗?我是否需要更改该网址?
答案 0 :(得分:0)
另外请确保您已正确设置网格,这是一个显示完成方式的小帖子:http://opensourcetester.co.uk/2011/07/06/selenium-grid-2/
顺便说一下,我看到代码执行驱动程序实例化。我错过了什么吗?
以下是如何完成的:
require_once "phpwebdriver/WebDriver.php";
require("phpwebdriver/LocatorStrategy.php");
$webdriver = new WebDriver("localhost", "4444");
$webdriver->connect("firefox");
$webdriver->get("http://google.com");
$element = $webdriver->findElementBy(LocatorStrategy::name, "q");
$element->sendKeys(array("selenium google code" ) );
$element->submit();
$webdriver->close();
答案 1 :(得分:0)
尝试将PHPUnit与Selenium Grid 2一起使用的问题已经报告给项目所有者。请查看可用的修补程序here,看看它是否适合您。
无论如何,如果我是你,我会开始考虑通过PHP提供的其中一个驱动程序迁移到WebDriver,例如php-webdriver。