欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Selenium Webdriver重新使用已打开的浏览器实例(IE 版)

程序员文章站 2022-07-13 21:37:58
...

看了  http://blog.csdn.net/wwwqjpcom/article/details/51232302  这个的文章,照葫芦画瓢,弄了一个IE版本。

 

MyIEDriver.java

 

 

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.Platform;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.Command;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.DriverCommand;
import org.openqa.selenium.remote.HttpCommandExecutor;
import org.openqa.selenium.remote.Response;
import org.openqa.selenium.remote.internal.WebElementToJsonConverter;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;

public class MyIEDriver extends InternetExplorerDriver {
	public static String sid = "0277ded1-a5fa-40f6-a396-9c192049051c";
	public static String url = "http://localhost:38005";
	private Capabilities mycapabilities;

	public MyIEDriver() {
		mystartClient(url);
		mystartSession(sid);
	}

	@Override
	protected void startSession(Capabilities desiredCapabilities, Capabilities requiredCapabilities) {
	}

	@Override
	protected void startClient(Capabilities desiredCapabilities, Capabilities req) {
	}

	protected void mystartClient(String localserver) {
		HttpCommandExecutor delegate = null;

		try {
			URL driverserver = new URL(localserver);
			delegate = new HttpCommandExecutor(driverserver);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}

		try {
			delegate.getAddressOfRemoteServer().openConnection().connect();
			super.setCommandExecutor(delegate);
			System.out.println("Connect to the existing browser");

		} catch (IOException e) {
			System.out.println(e.getMessage());
			System.out.println("can not connect" + delegate.getAddressOfRemoteServer() + "  and  " + delegate);
		}
	}

	protected void mystartSession(String sessionID) {

		if (!sessionID.isEmpty()) {
			super.setSessionId(sessionID);
		}

		Command command = new Command(super.getSessionId(), DriverCommand.NEW_SESSION);

		Response response;
		try {
			response = super.getCommandExecutor().execute(command);
		} catch (IOException e1) {
			e1.printStackTrace();
			System.out.println("Can't use this Session");
			return;
		}

		Map<String, Object> rawCapabilities = (Map<String, Object>) response.getValue();
		DesiredCapabilities returnedCapabilities = (DesiredCapabilities) super.getCapabilities();
		if (returnedCapabilities == null) {
			returnedCapabilities = new DesiredCapabilities();
		}
		for (Map.Entry<String, Object> entry : rawCapabilities.entrySet()) {
			// Handle the platform later
			if (CapabilityType.PLATFORM.equals(entry.getKey())) {
				continue;
			}
			returnedCapabilities.setCapability(entry.getKey(), entry.getValue());
		}
		String platformString = (String) rawCapabilities.get(CapabilityType.PLATFORM);
		Platform platform;
		try {
			if (platformString == null || "".equals(platformString)) {
				platform = Platform.ANY;
			} else {
				platform = Platform.valueOf(platformString);
			}
		} catch (IllegalArgumentException e) {
			// The server probably responded with a name matching the os.name
			// system property. Try to recover and parse this.
			platform = Platform.extractFromSysProperty(platformString);
		}
		returnedCapabilities.setPlatform(platform);

		this.mycapabilities = returnedCapabilities;

	}

	@Override
	public void quit() {
		try {
			execute(DriverCommand.QUIT);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Capabilities getCapabilities() {
		return mycapabilities;
	}

	@Override
	public Object executeScript(String script, Object... args) {
		if (!mycapabilities.isJavascriptEnabled()) {
			throw new UnsupportedOperationException(
					"You must be using an underlying instance of WebDriver that supports executing javascript");
		}

		// Escape the quote marks
		script = script.replaceAll("\"", "\\\"");

		Iterable<Object> convertedArgs = Iterables.transform(Lists.newArrayList(args), new WebElementToJsonConverter());

		Map<String, ?> params = ImmutableMap.of("script", script, "args", Lists.newArrayList(convertedArgs));

		return execute(DriverCommand.EXECUTE_SCRIPT, params).getValue();
	}

	@Override
	public Object executeAsyncScript(String script, Object... args) {
		if (!mycapabilities.isJavascriptEnabled()) {
			throw new UnsupportedOperationException(
					"You must be using an underlying instance of " + "WebDriver that supports executing javascript");
		}

		// Escape the quote marks
		script = script.replaceAll("\"", "\\\"");

		Iterable<Object> convertedArgs = Iterables.transform(Lists.newArrayList(args), new WebElementToJsonConverter());

		Map<String, ?> params = ImmutableMap.of("script", script, "args", Lists.newArrayList(convertedArgs));

		return execute(DriverCommand.EXECUTE_ASYNC_SCRIPT, params).getValue();
	}

}

 

开启浏览器 :

 

import java.net.URL;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.HttpCommandExecutor;

public class AppTest {
	public static void main(String[] args) {
		System.setProperty("webdriver.ie.driver", "D:/auto/public/selenium/webdriver/win64/IEDriverServer.exe");

		InternetExplorerDriver driver = new InternetExplorerDriver();
		
		String sessionid = driver.getSessionId().toString();
		System.out.println("session ID --->" + sessionid);
		
		URL url = ((HttpCommandExecutor)(driver.getCommandExecutor())).getAddressOfRemoteServer();
		System.out.println("url --->" + url.toString());
		
		driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
		driver.get("http://www.google.com");
		
		
		WebElement key =driver.findElement(By.id("lst-ib"));
		key.sendKeys("abc");
		
		Set set = driver.getWindowHandles();
		
//		driver.getCommandExecutor().getAddressOfRemoteServer().toString();
	}
}

 

不关闭浏览器,另外一段代码复用刚开启的浏览器 :

 

public class Apptest2 {
	public static void main(String[] args) {
		System.setProperty("webdriver.ie.driver", "D:/auto/public/selenium/webdriver/win64/IEDriverServer.exe");

		InternetExplorerDriver driver = new MyIEDriver();
//		driver.get("http://localhost:38005");

		driver.get("http://www.baidu.com");
//		driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
//		WebElement key =driver.findElement(By.id("lst-ib"));
//		key.sendKeys("g");

	}
}

 

 

相关标签: selenium webdriver