web-dev-qa-db-ja.com

隠された要素をクリックするSeleniumWebDriver

こんにちは私はSeleniumWebDriverを使用して非表示の要素をクリックする方法や要素を無効にする方法を知りたいです。

私はSelenium1で、これを次のように実行できることを知っています。

Selenium.click(id="idOfHiddenField");

これは機能しますが、Selenium 2(WebDriver)では機能しません。 jqueryを使用して非表示フィールドやJavaScriptを有効または表示したくありません。これは、ほとんどのテストがxpathを使用しているためです。

それとも、非表示のフィールドをクリックできる古いSeleniumを使用する必要がありますか?

11
Chun ping Wang

JavascriptExecutorを使用して問題を回避する簡単な方法があります。

例えば:

document.getElementsByClassName('post-tag')[0].click();

上記のJavaScriptは、このページの右上(質問の横)にある「Selenium」タグをクリックします(仮に非表示になっている場合でも)。

あなたがする必要があるのは次のようにJavascriptExecutorインターフェースを介してこのJS命令を発行することです:

(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");

これは、JSサンドボックスと合成クリックイベントを使用してクリックアクションを実行します。 WebDriverのユーザーアクティビティシミュレーションの目的は無効になりますが、ケースのようなニッチなシナリオで効果的に使用できます。

16
Ashwin Prabhu

1つの答えがありますが、複数の提案があります。

回答:Seleniumでバックアップされたドライバーを使用して、次のようなものを使用して非表示の要素をクリックします

Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
Selenium.clickAt("xpath=//area[@alt='Mercury']", clickPoint);

提案1:作成するものがたくさんあり、FOSSを探している場合に特別に偽のデータを作成するには、JMeterを使用してください。

提案2:JavaScriptがオフになっていることを確認するには、Firefoxインスタンス自体でJavaScriptを無効にします。

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setJavascriptEnabled(false);
1
Prashant Shukla

それはあなたのニーズに合わないかもしれませんが、いくつかの別の解決策は要素を隠すためにCSSを変更することかもしれません。

セレンがしない _display: none;_の要素を見つける間する次の要素を見つける:

_.hide {
    position: absolute;
    top: -99em;
    left: -99em;
}
_

次に、アプリで_jQuery.show/hide/toggle_を使用するのではなく、jQuery.toggleClass('hide', true/false/unset_to_toggle)を使用します。

0
Wil