次のHTMLがあります。
<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button>
「Google検索」ボタンをクリックするための次のコードは、WebDriverでJavaを使用してうまく機能しています。
driver.findElement(By.id("gbqfb")).click();
WebDriverで JavaScript を使用してボタンをクリックします。どうすればいいですか?
JavaScriptを介してクリックを実行すると、注意すべきいくつかの動作があります。たとえば、エレメントのonclick
イベントにバインドされたコードがwindow.alert()
を呼び出す場合、ブラウザードライバーの実装によっては、Seleniumコードがハングすることがあります。ただし、これを行うにはJavascriptExecutor
クラスを使用できます。しかし、私のソリューションは、要素を見つけるためにWebDriverメソッドを使用できるという点で、提案されている他のソリューションとは異なります。
// Assume driver is a valid WebDriver instance that
// has been properly instantiated elsewhere.
WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
また、WebElement
インターフェイスのclick()
メソッドを使用する方がよいかもしれませんが、ドライバーをインスタンス化する前に ネイティブイベントを無効にする を使用することをお勧めします。これにより、同じ目標が(潜在的な制限は同じで)達成されますが、独自のJavaScriptを記述して維持することは強制されません。
JavaScriptを使用してWebDriverのボタンをクリックするコードは次のとおりです。
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
これはJavaScriptではないことは知っていますが、物理的にマウスクリックを使用して動的なJavaScriptアンカーをクリックすることもできます。
public static void mouseClickByLocator( String cssLocator ) {
String locator = cssLocator;
WebElement el = driver.findElement( By.cssSelector( locator ) );
Actions builder = new Actions(driver);
builder.moveToElement( el ).click( el );
builder.perform();
}
OPの答えが本当に答えられたのかはわかりません。
var driver = new webdriver.Builder().usingServer('serverAddress').withCapabilities({'browserName': 'firefox'}).build();
driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('gbqfb')).click();
WebDriverはJavaツールであるため、WebDriverを使用してJavaScriptで実行することはできません。ただし、WebDriverを使用してJavaからJavaScriptを実行でき、特定のボタンをクリックするJavaScriptコードを呼び出すことができます。
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('gbqfb').click()");
このコードは、100ミリ秒後にWebElement
"we"でクリック操作を実行します。
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we);
XPathで:ターゲットページの要素を調べ、Xpathをコピーして、以下のscript:worked for meを使用します。
WebElement nameInputField = driver.findElement(By.xpath("html/body/div[6]/div[1]/div[3]/div/div/div[1]/div[3]/ul/li[4]/a"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", nameInputField);