webアプリの検査にWebDriverが便利になった。

webアプリを作成すると非常に面倒な事が必要。

今まではSHDocVw

ActiveX の WebBrowser コントロール (SHDocVw.dll) を .NET Windows Forms アプリで当たり前だったが、

Internetexplorerの9以降、自動化に対して弊害がピークに達してしまった。

穴だらけのIEセキュリティを、メッセージやダイアログで随時止める方法となった。

これはある意味正解だけど、Internetexplorerを使い続けていれば仕方がない。

しかし、セキュアなブラウザと言われていても通常の通信にセキュア接続する事も

ないので、Firefoxやクロムを利用する。

それを操作するコントロールは、良いものが無かったが、ようやく2013から良いものが出始めた。

webdriver

このライブラリはjavaライクで

最近の有名どころのブラウザをwebdriverのAPIを含めるている事。

ネイティブブラウザを駆動するから、ローカルまたは、ブラウザの自動化の面でリモートマシンが可能。

という代物。

ダウンロード

これの

Language Client Version Release Date
Java 2.48.2 2015-10-09 Download Change log Javadoc
C# 2.48.0 2015-10-07 Download Change log API docs
Ruby 2.48.0 2015-10-07 Download Change log API docs
Python 2.48.0 2015-10-07 Download Change log API docs
Javascript (Node) 2.47.0 2015-09-15 Download Change log API docs

c#をダウンロード

解凍

01

参照設定

FirefoxBinary firefoxBinaryは、実機の実行ファイルの保存先を指定するための

ものだけど、バージョンが複数あれば設定は必要。

1つだけなら設定は不要。

後は、使うドライバーを初期化すれば良い。

APIのドキュメントは公開されている。

2013年当時は、SHDocVw.のようなライクな仕様だったようで、ググって見ても

そのままソースを利用できない。

現在のAPIは2.48.0で非常に拡張されている。

とりあえず自分は、OpenQA.Selenium.Firefox Namespaceを確認して

FirefoxDriver Provides a way to access Firefox to run tests.

とあるのでこれで実行してとあるので
サンプルで実行
[TestFixture]
public class Testing
{
    private IWebDriver driver;
    <para></para>
    [SetUp]
    public void SetUp()
    {
        driver = new FirefoxDriver();
    }
    <para></para>
    [Test]
    public void TestGoogle()
    {
        driver.Navigate().GoToUrl("http://www.google.co.uk");
        /*
        *   Rest of the test
        */
    }
    <para></para>
    [TearDown]
    public void TearDown()
    {
        driver.Quit();
    } 
}

とサンプルがあるので

driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.google.co.uk");

のみで操作完了。フフ いいね。

driver.Quit();
はブラウザを閉じるときに使用。

画面が完全に表示しきらないとコントロールが返ってこないのでこれがほしかった。

SHDocVwでは、送り込んだ後この辺が非常に面倒。

SHDocVwの応答なしだった場合、子供が新規で立ち上がるので、それをメモリ上から拾わなければうまく動作しない。

IWebDriverはデバックができないのでその都度得られた情報とソースを確認する。

(Inherited from RemoteWebDriver.)

とあるのは、実機に仮想サーバを起動するときに利用できるメソッドらしい。

※間違いやすい昔のコーディングは同じような構文となっているが、通常はIWebDriverを使う。

良い点は、ブラウザが終了したか?のメソッドが通常で備わってるので全く意識なくナビゲートすれば良い。

WebDriverWait によって任意に時間を待つ事も出来た。

driverが抱えているエレメントも

//           指定できるもの
//タイプ     意味
//:class     ClassName
//:class_name     ClassName
//:css     CssSelector
//:id     Id
//:link     LinkText
//:link_text     LinkText
//:name     Name
//:partial_link_text     PartialLinkText
//:tag_name     TagName
//:xpath     Xpath

は指定できるし、By.CssSelectorなるものもあり、IDやclassが複数あってもほとんど問題なく自動化できた。

.Support.UIは、非常によく使う。

CLRで通信すれば非常に高速で操作はできるだろうが、やっぱりブラウザを確認して操作したいので重要。

実際に実行すれば、手動の時より、自動の方が安定して高速。

そして、FirefoxのFirefoxProfile Classもある。

これは、アドオンなどを作成する機能を有する。 gechoのエンジンだけ、アドインを付けて動作する事も可能。

IEの激重と比べて5倍ほど高速で安定。

すべてこちらに変更する事になった。

ここも参考になった。

構文は、Javaだけど瓜なため流用が可能。

 

本が出ているようですね。

とりあえず、web上の古いものは構文すら利用できません。 このような本を利用する方がいいのかな。

とりあえず、読まないで出来たけど。

利用できるドライバーの種類。

ドライバーと言うだけあってブラウザの癖を、柔軟に抽出されている。

各ブラウザのドライバー構文 結構違うので昔のこれしかできませんのような状態にはならない。便利。

OpenQA.Selenium

Selenium.Internal.SeleniumEmulation

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です