如何使用JavaScript在Selenium WebDriver中单击一个元素

我有以下的HTML:

<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button> 

我的下面的代码点击“Googlesearch”button在WebDriver中使用Java运行良好。

 driver.findElement(By.id("gbqfb")).click(); 

我想用WebDriver使用JavaScript来点击button。 我该怎么做?

通过JavaScript执行点击有一些你应该知道的行为。 例如,如果绑定到元素的onclick事件的代码调用window.alert() ,则可能会发现Selenium代码挂起,具体取决于浏览器驱动程序的实现。 这就是说,你可以使用JavascriptExecutor类来做到这一点。 然而,我的解决scheme不同于其他人提出的,因为您仍然可以使用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中的button的代码:

 WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("document.getElementById('gbqfb').click();"); 

我知道这不是JavaScript,但你也可以物理地使用鼠标点击来点击一个dynamic的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(); } 

您不能使用WebDriver在JavaScript中执行此操作,因为WebDriver是一个Java工具。 但是,您可以使用WebDriver从Java执行JavaScript,并且可以调用一些JavaScript代码来单击某个特定的button。

 WebDriver driver; // Assigned elsewhere JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("window.document.getElementById('gbqfb').click()"); 

不确定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(); 

此代码将在100 ms后对WebElement “我们”执行单击操作:

 WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we); 

跨浏览器testingjava脚本

 public class MultipleBrowser { public WebDriver driver= null; String browser="mozilla"; String url="https://www.omnicard.com"; @BeforeMethod public void LaunchBrowser() { if(browser.equalsIgnoreCase("mozilla")) driver= new FirefoxDriver(); else if(browser.equalsIgnoreCase("safari")) driver= new SafariDriver(); else if(browser.equalsIgnoreCase("chrome")) //System.setProperty("webdriver.chrome.driver","/Users/mhossain/Desktop/chromedriver"); driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS); driver.navigate().to(url); } } 

但是当你想运行firefox你需要铬path禁用,否则浏览器将启动,但应用程序可能不会(尝试两种方式)。