2017-12-21 5 views
1
私はセレンwebdriverをとJavaを使用しています

スローし、私は、この要素をクリックする必要があります。ここにセレン - 任意のアクションをトリガーしない]をクリックしたり例外

コードです:

driver.get(urlHp); 
WebDriverWait wait = new WebDriverWait(driver, 10); 
By btn = By.cssSelector("#_content-it_it_jcr_content_home-par1_promo_-par_o > div > li> a> div.btn-wrapper > button".trim()); 
wait.until(ExpectedConditions.visibilityOfElementLocated(btn)); 

driver.findElement(btn).click(); 

私が得ることができます要素を削除しても例外はスローされませんが、クリックは機能しません。

要素がビューポートの下にあることに注意してください。

どうすれば修正できますか?

答えて

1

Javascriptの実行プログラムを試してみてください。

JavascriptExecutor js=(JavascriptExecutor) driver; 
js.executeScript("arguments[0].click()", driver.findElement(btn)); 
+0

ありがとう!あなたはもう少しそれを説明することができますか? – eeadev

+0

助けてくれることを願っています。https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html –

1

下記のアクションクラスを試してみてください。

driver.get(urlHp); 
WebDriverWait wait = new WebDriverWait(driver, 10); 
By btn = By.cssSelector("#_content-it_it_jcr_content_home-par1_promo_-par_o > div > li> a> div.btn-wrapper > button".trim()); 
wait.until(ExpectedConditions.visibilityOfElementLocated(btn)); 
Actions actions = new Actions(driver); 
WebElement btnElement=driver.FindElement(btn); 
actions.MoveToElement(btnElement).Click(btnElement).Perform(); 
+0

ありがとうございますが、私はこれを取得しています。アクションタイプのmoveToElement(WebElement)メソッドは引数には適用されません(By) – eeadev

+0

更新された答えを確認してもう一度お試しください。 – Murthi

+0

ありがとうございました私はすでに他の答えを受け入れましたが、あなたの時間のために+1を与えてください – eeadev

1

セレン目に見える要素をのみクリックすることができます。これは、ユーザーがあなたのアプリを使用するときにうまくいくということです。 は何ランジットさんはあなたを示した:

JavascriptExecutor js=(JavascriptExecutor) driver; 
js.executeScript("arguments[0].click()", driver.findElement(btn)); 

これは、実際のjavascriptのコードでボタンをクリックしています。クイックフィックスの場合、これは問題ありません。しかし、この実装では、要素のサイズが1px x 1pxの場合も要素をクリックすることに注意してください。テストは合格しますが、あなたのアプリは使えません。 私はむしろ、セレクションのためにscrollIntoViewメソッドを使用することをお勧めします。

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

あなたは、実際のユーザーの流れに近いこの方法です。

+0

もっと良い例が実際にはcss display:noneでした。 :) – JSONStatham

関連する問題