2012-01-03 5 views
7

(私はSOに多くの他の類似の記事を見てきましたし、残念ながら、この問題を解決することができていないので、ここに...)セレンwebdriverをクリック()はIE9

私が使用しているセレンで失敗しますWebDriver(C#実装、バージョン2.15)を使用して、かなりシンプルなWebページを作成できます。ページには、フォームを提出するためのユーザ名とパスワード、および1つの<入力用の2つの<入力> 'sのform>を含んでいます。ユーザー名とパスワードの値を正常に入力できますが、送信ボタンのClick()呼び出しは無効です。

他の勧告パー

、私はどれも働いていない、次のトリックを試してみました:

  • 要素の親にcurrentWindowHandle
  • クリックに変更ウィンドウのフォーカスは、その要素
  • に追加長い暗黙の待機
  • 長い明示的な待ち時間を追加する(20秒間スリープ状態にする)
  • 要素で一括してクリックしてください。
  • 使用)(代わりにクリックした)(提出
  • (セレンはこれをエラーとして報告する)要素に「N \」私は<入力>ボタンがあることを確認した

注キーを送ります確かに正常に見つかりましたので、問題はないようです。

また、私が実際にセレン、土地の外で働くんボタンを検証していることに注意してください。つまり、サイトを参照してログイン資格情報を入力し、送信ボタンをクリックすることができます(それは機能します)。

はまた、この問題はIE上であることに注意してください。 ChromeとFF7で私にとっては起こりません。

だから言った、誰もが任意の他のアイデアを持っているのですか?

答えて

5

あなたのサイトは一般に公開されていますか? IE zoom levelは100%ですか?ネイティブのクリックイベントは、ネイティブマウス イベントが正しい座標に設定することができるようにhere

ブラウザのズームレベルを100%に設定する必要がありますドキュメントから作業することが必要条件です。

これが機能しない場合は、webdriverのバグのようです。問題hereを開く必要があります。

はこのことを言って、あなたはおそらく一時的な解決策として、一方でJavaスクリプトのルートを行くことができます。何かのように、

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()"); 
+0

IEズームレベルを設定するにはどうすればよいですか? –

+0

うん、それは確かにズームレベルです。ありがとう!プログラムレベルでズームレベルを検出および/または設定する方法が本当に必要ですが、私はいつも私のテストが失敗することはありません... –

2

それはマウスクリックが発生に問題がある可能性がありように見えます。 SeleniumのActionsメカニズムを使用して、マウスのクリックに少しのオフセットを加えてみました。正常に要素をクリックします:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform(); 
1

この問題がありました。Onボタン

:私は、解像度が見つかりましたが、私は次のように私のために働いたことがわかったポストを思い出すことができない

var navButton = driver.FindElement(By.Id("NavButton")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton); 

は毎回作品。

クリックイベントをテーブル行に送信する際に問題が発生していました。時には.Click()は実際には上記の行にイベントを送信します(私たちは、Seleniumでクリックできない隠れたラジオボタンを持つひどく複雑なテーブル構造を持っています)。上記のハックは、FindElementでアクセス可能なセルでは機能しません。

最後に、その行の中の画像を選択してその画像にクリックするだけでした。

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img); 

希望します。

-1

一つは、より多くの可能な回避策は次のようにクリックを繰り返すようにすることができます:

Btn.click(); 
Btn.click(); 

第一クリックだけで設定したフォーカスと第二1は、実際のクリックを実行するので。それは私のために働いた。

+2

これは、複数のブラウザでテストした場合、最初のクリックがアクションを実行し、次に2回目のクリックが例外をスローすることになるという問題ですそれは要素を見つけることができないからです。 – boolean

1

私はここで複数の解決策を見ていますが、他の誰かが別のアプローチを必要とする場合に私が働いていたことを分かち合いたいと思いました。私が使用FindElement(By.CSSSelector("'CSSPath'"))

btn.Sendkeys(Keys.Enter); 
0

例えば私のために解決策は、異なる方法に

を使用してクリックするのと同じくらい簡単だった、同様の問題がありました。ボタンにCSSが適用されている場合は、他の複数のステートメントを書き換えて、WebDriverWaitのID、タグなどの代替手段を持つ要素を見つけてください。

0

ネイティブイベントを有効にする"true"をIE上で実行しているときにFFとChromeで同じコードを実行する場合は、それらのブラウザでもネイティブイベントを「true」にする必要があります。

実行したいブラウザを設定しているときに行うことができます。

0

トライコード -

driver.FindElement(By.Id("btn")).sendkeys("\n"); 
0

これを試してみてください。..
WebElement hiddenWebElement = d.findElement(By.xpath(XPathの));
((JavascriptExecutor)d).executeScript( "arguments [0] .click()"、hiddenWebElement);

0

私のために働い以下:

@FindBy(id = "submit_action") 
WebElement submitButton_; 
... 
public void clickSubmit() { 

    if (driver_ instanceof InternetExplorerDriver) { 
     ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_); 
    } 
    else { 
     submitButton_.click(); 
    } 
} 

fireEventだけので、IEの代替でサポートされています。