web-dev-qa-db-ja.com

Selenium 2(WebDriver)とPhpunit?

PhpunitでSelenium 2を使用する方法を知っている人はいますか? PHPにSelenium 2のサンプルはありますか?

39
Paul R Rogers

クイックアップデート:phpunitがSelenium 2をサポートするようになりました


執筆時点では、PHPUnitはSelenium 2をサポートしていません。

php-webdriver from facebook 完全なWebDriver APIをPHPからエレガントな方法で呼び出すことができます。引用するには:

ほとんどのクライアントでは、まずプロトコルを読んで何が可能かを確認し、次にクライアント自体を調べてそれを呼び出す方法を確認する必要があります。これにより、後者のステップをなくすことができます。

localhost:4444/wd/hubでインターフェースを提供するSelenium 2サーバーを起動することによって使用されます。

/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サポートではありませんが、非常に堅牢なアプローチです。

19
cmc

http://code.google.com/p/php-webdriver-bindings/ をご覧ください。これはPHP JsonWireProtocolを使用してSelenium Webdriverサーバーと通信するライブラリです。これは初期のバージョンですが、動作します。

8
kolec

現在(2017) php-webdriver を使用することをお勧めします。AFAIKの最も機能が充実しているものPHP Selenium WebDriverと対話するための言語バインディング。

このライブラリは、Selenium 2をサポートするために2014年に書き直され、その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 などの別のツールは必要ありません)。

プロジェクトのホームページ で言及されている他のテストフレームワーク統合オプションもあります。

5
Ondrej Machulda

PHPUnit Selenium統合コードは、別のプロジェクトとして github にありますが、Selenium 2をサポートしていないことがわかるので、質問の答えは-いいえ、Selenium 2をPHPUnit。

しかし、ソースツリーを複製してSelenium 2で動作させることができます。

3
Anti Veeranna

そのためのライブラリを作成しました。また、JSONワイヤープロトコルを使用しますが、他の言語の例と互換性を持たせることを目的としたため、構文は非常に似ています。これがリンクです: https://github.com/Nearsoft/PHP-SeleniumClient

気に入ったら、共有、改善、フォークしてください:)

よろしく、マーク。

2
markdrake

phpunit webdriverバインディングは、Googleコードでホストされています。これ以外にも理解する必要があることがあります。

  1. PHPUnitをインストールする必要があります。 (PEARパッケージを使用するか、手動でダウンロードしてインストールします)
  2. PHP IDE Eclipse PDTなどをダウンロードしてインストールする必要があります。
  3. WebDriver Seleniumテストの実行中は、Selenium-Stand-Aloneサーバーが実行されている必要があります
1
user887648

私は、Selenium 2、Facebookラッパーの使用方法についてのチュートリアルを書きました。

http://testigniter.blogspot.co.uk/2012/01/running-Selenium-2-webdriver-using.html

1
Adamantus

今日、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/

1
HerrWalter

MentaWebDriver を必要とするSelenium 2 Frameworkの使用をお勧めします。どちらのパッケージも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>

bootstrapファイルは、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パッケージには here にある2つのデモファイルもあります。

1
falsch

はい、Selenium 2 (WebDriver)PHPUnit testsは単純です。しかし、Selenium IDEに期待する必要があるので、最初にSelenium commandを試すべきであるというアドバイスをしたいと思います。 Selenium commandを期待している場合、そうであればSelenium 2 (Webdriver)PHPUnit testの方が簡単です。

こちらSelenium IDEチュートリアルを試すことができ、 こちらSelenium 2 (Webdriver) and PHPUnitを学ぶことができます。

0
user1699797

私は Selenium2php に取り組んでいます。 Selenium IDEで記録したSelenium1のテストが多すぎます。 htmlテストをSelenium2に変換します。実際、PHPUnit_Extensions_Selenium2TestCaseの場合。私はより多くのコマンドを実装するつもりです。

0
rNix