有人知道如何将 Selenium 2 与 Phpunit 一起使用吗?PHP中是否有任何Selenium 2示例?
11 回答
快速更新: phpunit 现在支持 Selenium 2
在撰写本文时,PHPUnit 不支持 Selenium 2。
来自facebook的php-webdriver允许以优雅的方式从 PHP 调用完整的 WebDriver API。去引用:
大多数客户端要求您首先阅读协议以了解可能的情况,然后研究客户端本身以了解如何调用它。这希望消除后一步。
它通过启动 Selenium 2 服务器来使用,该服务器在localhost:4444/wd/hub
.
/usr/bin/java -jar /path/to/selenium-server-standalone-2.7.0.jar
然后运行调用该接口的 PHP 测试代码。例如:
<?php
require '/path/to/php-webdriver/__init__.php';
$webdriver = new WebDriver();
$session = $webdriver->session('opera', array());
$session->open("http://example.com");
$button = $session->element('id', 'my_button_id');
$button->click();
$session->close();
WebDriver API映射到 PHP 方法,将示例中的调用click
与element
文档中的 element/click API 调用进行比较。
然后可以将测试代码包装在常规的 phpUnit 测试中。
这不是原生 phpUnit 支持,但它是一种非常强大的方法。
请查看http://code.google.com/p/php-webdriver-bindings/。这是一个使用 JsonWireProtocol 与 Selenium Webdriver 服务器通信的 PHP 库。这是早期版本,但它可以工作。
目前(2017 年)我推荐使用php-webdriver,AFAIK 与 Selenium WebDriver 交互的功能最完整的 PHP 语言绑定是什么。
这个库在 2014 年被重写以支持 Selenium 2,它的 API 主要基于官方的 Java WebDriver 绑定。这意味着您还可以利用用 Java 编写的代码示例,因为它们通常可以在 PHP 中简单地遵循。它还以现代 OOP 方式编写,并遵循标准 PSR-4 命名空间和 PSR-2 编码标准。
我会推荐这个库而不是phpunit-selenium - 因为它最初是为 Selenium 1 设计的(尽管它现在支持 Selenium 2)并且它的 API 与 PHPUnit 非常紧密。它也不支持某些 WebDriver 功能,并且与 upcomin W3C WebDriver 规范不是最新的。
另一方面,php-webdriver 是独立的库,但它与 PHPUnit 的集成非常简单 - 或者您可以使用像Steward这样的现有工具,它包括所有 PHPUnit 集成并提供很好的便利层等。允许简单地并行运行多个测试(不需要像paratest这样的其他工具)。
项目主页上还提到了其他测试框架集成选项。
PHPUnit Selenium 集成代码作为github中的一个单独项目存在,据我所知,它不支持 Selenium 2,因此您的问题的答案是 - 不,您不能将 Selenium 2 与 PHPUnit 一起使用。
但是您可以克隆源代码树并使其与 Selenium 2 一起使用。
我们为此创建了一个库,希望对您有所帮助。它也使用 JSON Wire 协议,但我们的目标是使其与其他语言的示例兼容,因此语法将非常相似。这是链接:https ://github.com/Nearsoft/PHP-SeleniumClient
如果你喜欢它,分享它,改进它或分叉它:)
问候,马克。
phpunit webdriver 绑定托管在谷歌代码上。除此之外,我们还需要了解一些事情。
- 需要安装 PHPUnit。(通过 PEAR 包或手动下载安装)
- 必须下载并安装 Eclipse PDT 等 PHP IDE。
- Selenium-Stand-Alone 服务器必须在执行 WebDriver Selenium 测试时运行
我写了一篇关于如何使用 Selenium 2(Facebook 包装器)的教程,在这里可以找到:
http://testigniter.blogspot.co.uk/2012/01/running-selenium-2-webdriver-using.html
我推荐使用Menta,这是一个需要WebDriver的 Selenium 2 框架。这两个包都与 PSR-0 兼容,因此您可以将它们与 Composer 一起使用。您可以使用 phpunit.xml 配置 selenium。这里有一个例子
<phpunit bootstrap="tests/bootstrap.php"
backupGlobals="false" backupStaticAttributes="false"
strict="true" verbose="true">
<php>
<var name="testing.selenium.seleniumServerUrl" value="http://localhost:4444/wd/hub" />
<var name="testing.selenium.browser" value="firefox" />
<var name="testing.selenium.windowPosition" value="0,0" />
<var name="testing.selenium.windowSize" value="1280x1024" />
<var name="testing.selenium.windowFocus" value="1" />
<var name="testing.selenium.timeoutImplicitWait" value="10000" />
</php>
<testsuites>
<testsuite name="Integrationstests">
<directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">tests/integration</directory>
</testsuite>
</testsuites>
<logging>
<log type="junit" target="build/logs/junit.xml"/>
</logging>
</phpunit>
引导文件从 testing.selenium.* 读取配置变量,因此您可以轻松设置新变量。
<?php
\Menta_ConfigurationPhpUnitVars::addConfigurationFile(__DIR__ . '/../phpunit.xml');
$configuration = \Menta_ConfigurationPhpUnitVars::getInstance();
\Menta_SessionManager::init(
$configuration->getValue('testing.selenium.seleniumServerUrl'),
$configuration->getValue('testing.selenium.browser')
);
现在您可以轻松地实现您的测试用例。这里有一个例子
<?php
namespace tests\integration;
use WebDriver\LocatorStrategy;
class TestSearch extends \PHPUnit_Framework_TestCase
{
public function testGoogle()
{
$session = \Menta_SessionManager::getSession();
$session->open('http://www.google.de');
$element = $session->element(LocatorStrategy::NAME, 'q');
$this->assertTrue($element->displayed());
}
}
Menta 包也有两个演示文件,位于此处
今天,我们深入了解了 Selenium 和 phpunit。这是可能的,您可以在这里找到一些示例和说明:http: //phpunit.de/manual/current/en/selenium.html
phpunit 的创建者得到了一些很好的 api 示例。通过一些实验并阅读错误消息,您将相处融洽。我自己也没有找到一个很棒的图书馆。
https://github.com/sebastianbergmann/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.php
最后一个来自 nettuts 的教程可以帮助您了解基础知识:http: //net.tutsplus.com/tutorials/php/how-to-use-selenium-2-with-phpunit/
我在selenium2php上工作。我有太多用 Selenium IDE 记录的 Selenium1 测试。现在它将 html 测试转换为 Selenium2。实际上,对于 PHPUnit_Extensions_Selenium2TestCase。我将执行更多命令。