selenium webdriver 调用js传参

首先,我们使用如下方式初始化driver:

WebDriver driver = new FirefoxDriver();  
JavascriptExecutor jse = (JavascriptExecutor)driver;

1.直接传入JavaScript代码

可以直接给jse传入javascript代码:

jse.executeScript("window.document.getElementById('jingshou').click()";  

2.传入WebElement执行JS:

WebElement element = driver.findElement(By.id("jingshou"));  
jse.executeScript("arguments[0].click();", element);  

又或者:

jse.executeScript("arguments[0].onclick=function(){alert('This is my alert!');}", element) 

其中auguments[0]就代表element, 甚至我们可以传入更多的参数,比如

WebElement div = driver.findElemnt(By.id("myDiv"));  
jse.executeScript("arguments[0].setAttribute('style', arguments[1])", div, "height: 1000px");  

通过执行以上代码,我们指定的DIV就新增(修改)了 style {height: 1000px}的属性

3.使用JQuery:

// 如果没有jQuery 注入jQuery
	private void exejQuery(String js) {
		try {
			Thread.sleep(1000L * 3);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		jse = (JavascriptExecutor) driver;
		try {
			jse.executeScript(js);
		} catch (WebDriverException e) {
			jse.executeScript("var headID=document.getElementsByTagName(\"head\")[0];var newScript = document.createElement('script');newScript.type = 'text/javascript';newScript.src ='https://code.jquery.com/jquery-3.2.1.min.js';headID.appendChild(newScript);");
			try {
				Thread.sleep(1000L * 10);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
			jse.executeScript(js);
		}
	}

调用

exejQuery("$(\".btn-common\").click()");


(1)