WebDriver拾级而上(13) – 调用Java Script

webdriversjes

在用selenium 1.X的时候常常会用到geteval_r()方法来执行一段js脚本来对页面进行处理。

当然selenium webdriver也提供这样的一个方法:JavascriptExecutor.executeScript(string)

例如:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;

public class  SimpleExample {   
	public static void main(String[] args) {
		ChromeDriver driver = new ChromeDriver();
		driver.executeAsyncScript("arguments[0](); alert('Hello')");
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		driver.switchTo().alert().accept();
	}
}

上面是一个最简单的例子,打开一个浏览器,然后弹层一个alert框。注意这里的driver要被强制转换成JavascriptExecutor。

下面演示在打开51.com首页如何得到帐号输入框中显示的字符,并打印输出。

<div class='input_wrap'>
<input id="passport_51_user" type="test" value="" tabindex="1" title="用户名/彩虹号/邮箱" name="passport_51_user" style="color:rgb(0,0,0);">
</div>
package com.test;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test_JsExecutor {
	public static void main(String[] args) {
		String url = "http://www.51.com";
		
		//打开chrome
		WebDriver dr = new ChromeDriver();
		String js = "var user_input = document.getElementByIdx_x_x_x(\"passport_51_user\").title;return user_input;";
		String title = (String)((JavascriptExecutor)dr).executeScript(js);
		System.out.println(title);

		dr.quit();
	}
}

输出结果为:

用户名/彩虹号/邮箱

其他用例:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("(function(){
								inventoryGridMgr.setTableFieldValue('"+ inventoryId + "','" + fieldName + "','"+ value + "');
							}
				  )()"
				);

[转自网络(如知原出处,请留言告知)]

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据