如何使用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禁用,否则浏览器将启动,但应用程序可能不会(尝试两种方式)。