2017-01-27 21 views
1

カーソルが入力フィールド内にあることを確認する方法を見つけようとしています(そのフィールド内でクリックをシミュレートするため)。Seleniumはカーソルの位置を確認します

フィールドエントリが検証に失敗した場合、Webページの上部にエラーメッセージが表示されるというシナリオがあります。

エラーメッセージは、入力フィールドがあるページを指すようにスクロールし、カーソルをフィールド内に置くハイパーリンクです。

カーソルがボックス内にあることを確認する方法はありますか?

おかげ

答えて

2

カーソルがテキストフィールドであり、そのテキストフィールドにフォーカスがあるか、能動素子であることを意味します。カピバラはこのための方法を直接提供していない。ただし、いくつかのオプションがあります。能動素子

スイッチを使用すると、基礎となるセレンドライバに落下した場合は、アクティブ素子retriveことができます。

page.driver.browser.switch_to.active_element 
=> #<Selenium::WebDriver::Element:0x34409cfc id="0.6429182184051125-3"> 

能動素子とを、あなたはそれがあることを確認することができますあなたが期待する要素:

# Use Capybara to find the element you expect to be in focus 
expected_element = page.find("#field_id") 

# Get the element that is actually in focus 
active_element = page.driver.browser.switch_to.active_element 

# Check that the two elements are the same 
# Note that you need to call `native` so that you are comparing Selenium elements 
expect(active_element).to eq(expected_element) 

使用evaluate_script

JavaScriptを使用してアクティブな要素に関する詳細を取得する方法もあります。たとえば、次のコードは、フォーカスのある要素のIDを返します。

active_id = page.evaluate_script("document.activeElement.id") 
expect(active_id).to eq('field_id') 
+0

私は両方のソリューションを試しました。 Javascriptを評価するとき、私はxを見つけると予想されますが、無しです。 – Tom

+0

クリックと期待の間に2秒の睡眠を加えた後、それは働いた。ありがとうございました – Tom

関連する問題