2

Perl バインディングを使用して Selenium ドライバーを実行しようとしていますが、例とドキュメントが不足しているため、いくつかの障害に遭遇しています。いくつかの基本的なことを行う方法を理解しましたが、Remote::Driverパッケージを使用してページ上のテキストを検証するなど、他の単純なことでいくつかの問題に遭遇しているようです。

私がこのようなことをしようとすると:

$sel->get("https://www.yahoo.com/" );
$ret = $sel->find_element("//div[contains( text(),'Thursday, April 26, 2012')]");

要素が見つからないというメッセージが返されます。ドライバーパッケージにはテキストを見つけるためのサブ固有がないように見えるため、xpathを使用しています..少なくとも私が見つけたものではありません。

私の xpath 設定が間違っている場合、または誰かがより良い方法を知っている場合、それは非常に役に立ちます。ボタンのクリックにも問題があります..しかし、これは簡単なようで、私を悩ませています。

4

2 に答える 2

1

Selenium::Remote::Driver を使用して Web ページ上のテキストを検索し、そのテキストを「既知の適切な値」と比較することは、次のように実装できます。

ファイル: SomeWebApp.pm

package SomeWebApp;

sub get_text_present {

    my $self = shift;
    my $target = shift;
    my $locator = shift;

    my $text = $self->{driver}->find_element($target, $locator)->get_text();

    return $text;

}

テストスクリプトのどこかに:test.pl

my $text = $some_web_app->get_text_present("MainContent_RequiredFieldValidator6", "id");

上記は、$locator によって識別される検索スキームを使用して $target によって識別される要素を検索し、変数 $text に格納します。その後、それを使用して、必要に応じて比較/検証できます。

于 2012-05-09T21:08:28.390 に答える
0

https は、http よりも読み込みが少し遅くなります。WebDriver は、要求されたページが完全に読み込まれるまで待つことについてはかなり優れていますが、ここで少し手助けする必要があるかもしれません。スリープを追加します(2); get() 呼び出しの後、それが機能するかどうかを確認します。その場合は、1 秒に短縮してみてください。get_title 呼び出しを実行して、自分が持っていると思われるページを読み込んだかどうかを確認することもできます。

もう 1 つの可能性は、テキスト ターゲットがページの内容と完全に一致していないことです。最初に "April" などの 1 つの単語を検索して、ヒットするかどうかを確認し、不一致が見つかるまで展開します (たとえば、この文字列には実際に改行や改行がありますか? HTML はどうですか?非改行スペースなどのエンティティ?)。また、div の下の任意の場所でそのビットのテキストを探しています (おそらくすべての子テキストが連結され、検索が行われます)。それは、まったく何も得られないよりも、網を広げすぎる可能性が高いですが、知っておく価値はあります.

于 2013-05-31T19:16:20.230 に答える