2013-02-20 6 views
7

とワチール-webdriverをので、私たちは私たちのページに次のコードを持っている:要素を回避する方法ビューにスクロールすることができません - ルビー

<div class="toggle-wrapper"> 
    <input id="HasRegistration_true" class="registration_required toggle" type="radio" value="True" name="HasRegistration" data-val-required="The HasRegistration field is required." data-val="true"> 
    <label for="HasRegistration_true" class="">On</label> 
    <input id="HasRegistration_false" class="registration_required toggle" type="radio" value="False" name="HasRegistration" checked="checked"> 
    <label class="checked" for="HasRegistration_false">Off</label> 
</div> 

これらは、2つのラジオボタンです。 'オンとオフ'。 「オフ」がデフォルト値です。

Watir-webdriverとRubyを使用して、「オン」ラジオボタンを選択します。私たちはこのようにそれを行う:

browser.radio(:id => "HasRegistration_true").set 

しかし、そうすることで、我々は次のエラーを取得する:

`WebElement.clickElement': Element cannot be scrolled into view:[object HTMLInputElement] (Selenium::WebDriver::Error::MoveTargetOutOfBoundsError) 

私たちは、要素にセレン2つのスクロールにページを知っているので、スクロールダウンしようとしていることは無用です。 私たちは常に最新のリリースのwatir-webdriverとrubyを使用しています。

私たちはQAエンジニアであるため、ページのHTMLを変更することはできません。

browser.element(:xpath, "//input[@id='HasRegistration_true']").click 

または

を代わりに、それはあなたが、あなたはCSSを使用したほうが良いでしょう見つけるためにしようとしている隠された要素である場合:

+3

提供されたhtmlだけのページを使用して問題を再現できませんでした。あなたの問題を再現するために必要なページが増えていますか?どのブラウザを試しましたか(つまり、すべてのブラウザで発生していますか?)あなたは最新のwatir-webdriver宝石を使って言及しましたが、selenium-webdriverが最新であることを保証しましたか? –

+0

あなたは「セレン2は要素をページにスクロールすることがわかっています...」これについて詳しく説明できますか?あなたはどうやってこれを知っていますか?あなたはそれが起こるのを見ていますか? –

+0

ページにAjaxの問題がたくさんありますか?ブラウザが「読み込み」された後にレンダリングされるページの部分あなたの問題は、「準備ができている」、またはページ上の最後の位置に移動される前、つまり同期の問題で要素とやりとりすることに起因することがあります。あなたは手動でIRB経由でコマンドを試してみると、正常に動作しているかどうかを確認できます。通常は同期問題の兆候です。 –

答えて

0

まず第一には、XPathを使用して要素を見つけてみてください。 Firefox用のfirebugアドオンをダウンロードして、あなたの要素のCSSパスをコピーしてください。

それはのようなものでなければなりません:

browser.element(:css => "the CSS path you have copied from Firebug").click 

2の一つはあなたのためにそれを行う必要があります!

運が良かった!

0

無線要素を設定可能にするためにjavascriptを実行すると、その場でhtmlを操作できます。ページ上でjavascriptを実行するには、次のような操作を行います。 @browser.execute_script("your javascript here") 次のjavascriptのようなものを使用して、ラベルのタグを取り除き、入力しようとしていた入力タグから外しました私が持っていたChrome固有の問題については、 execute_script("$(\"label.classname\").removeClass(\"classname inline\")")

+0

この質問は、ラジオ要素が設定可能でないことを示唆していません。彼らはそれにスクロールするのが難しいだけです。 –

0

要素が、私は「​​?」ページの「ない]ラジオボタンをクリックして次の操作を実行するために持っていたことが分かったフォームとDIV(ラップ)クラス内に含まれている場合:

div_list = @ browser.form(:アクション=> "?AboutYourVehicle.aspx ton_t = CTMMO & prdcls = PC & rqstyp = newmotorquote & AFFCLIE = CM01")。DIV(:クラス=> "inputWrap")。 divs(:class => "custom-radio")

そして: div_list [1]。

が動作することができますwatir-scrollと呼ばれるRubyの宝石があります:これは

1

はここで私のために働いた2つのソリューションがありすぎ:-)あなたの問題を解決し

希望をクリックします。

browser.radio(:id, "HasRegistration_true").focus 
browser.radio(:id, "HasRegistration_true").set 
:あなたが宝石を追加したくない場合は

はその後

require 'watir-scroll' 
browser.scroll.to browser.radio(:id, "HasRegistration_true") 

は、私の同僚は、やや意外に(私には)上記のコードと同じ効果を持っていた何かを示唆しました

私のコードでは、 ".focus"は以前は見えなかった要素にまっすぐスクロールしました。あなたのためにもうまくいくかもしれません。

関連する問題