6

RubyとWatir-Webdriverは初めてです。私はVBScriptで書かれたサイトの自動化スイートを持っていますが、Firefoxをサポートする必要があるため、Ruby/Watirに変換したいと思います。私はRubyが本当に好きで、Watirに取り組んでいますが、Webdriverにログイン画面を表示させるために1週間を費やしました。

このサイトは、「同意する」領域のある「警告画面」で始まります。ユーザーが[同意する]をクリックすると、ログイン画面が表示されます。

<body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept">

<area href="javascript:showLogin();" shape="rect" coords="280,390,384,432" />

</map></div></div></body>

ログイン画面を表示するには、その領域をクリックする必要があります(これは同じページであり、実際にはフォームであり、非表示になっています)。私はこれをVBScriptで一日中行います:

objExplorer.Document.GetElementsByTagName("area")(0).click

ただし、Watir-Webdriverを使用すると、browser.area(:index、0).clickは何もしません。

puts browser.area(:index, 0).shape
=>RECT

puts browser.area(:index, 0).coords
=>280,390,384,432

したがって、スクリプトがarea要素を「認識」し、その属性を読み取ることができることを私は知っています。クリックイベントでは何もしません。

href自体でbrowser.gotoを使用する場合:

browser.goto("javascript:showLogin();")

ログインは表示されますが、要素を操作できません(ユーザー名とパスワードのテキストフィールドを設定します)。(HTMLを表示するために)開発ツールウィンドウを開いた状態でページを表示していますが、「読み込み中...」と表示されています。

これは私が立ち往生しているところです。興味深いことに、ログインフォームの名前を使用して、次のことを行うと、次のようになります。

browser.form(:name, "LoginForm").submit

ユーザー名とパスワードが空白であるというフォームからポップアップメッセージが表示されるので、まだいくつかの相互作用があります。

もちろん、ユーザー名/パスワードを手動で入力すれば、「読み込み中...」と表示されていても、フォームを正常に送信できます。

「when_present.click」やその他のブラウザ待機のテクニックを理解しています。これらは機能しません。私のジレンマは、その領域をクリックできないことです。javascriptでgotoを使用すると、ブラウザーはWatirからの自動化を無視します。

ご協力いただきありがとうございます。「申し訳ありませんが、WatirまたはWebdriverはこれを行いません」という答えでさえ私には受け入れられます。それは私が先に進んで他の解決策を探すことを可能にするでしょう。

コメントの質問の後に編集します。

申し訳ありませんが、サイトは公開されていないため、リンクを投稿できません。Firefoxでの作業に関しては、スクリプトは問題なく機能します。IEに問題があります。コメントは私に考えさせられました:私は最初にサイトにナビゲートしたときに「...信頼できる証明書が発行されていません...」証明書エラーが発生します。IEで取得した証明書エラーにより、フォームを表示する前に自動化が何らかの形で切断される可能性がありますか?私はstackoverflowでここで取得した行を使用して、証明書エラーを過ぎてクリックします:

browser.goto("javascript:document.getElementById('overridelink').click()")

しかし今、これは問題の一部かもしれないと思います。IE(IE 9を使用)オプションに移動し、証明書をチェックするためのセキュリティオプションのチェックを外しましたが、役に立ちませんでした。これが問題の原因である可能性がある場合は、インフラストラクチャチームと交渉して、新しいサーバーを構築するたびにダウンロードする証明書を生成する必要があります。

4

1 に答える 1

6

さて、何百もの投稿と何時間ものGoogle検索を読んだ後、私はついに私の問題の解決策を見つけたと思います:browser.execute_script。

browser.execute_script("showLogin();")

とても簡単でした。browser.gotoを使用すると、ページの読み込みがハングし、Webドライバーがタイムアウトしました。execute_scriptの使用は完全に機能します!

于 2012-11-13T20:42:39.553 に答える