`

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

阅读更多

看了  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使用已打开的浏览器

    标题"使用已打开的浏览器"提示我们将讨论如何利用Selenium与已启动的浏览器实例进行交互,而非每次都启动一个新的浏览器会话。 在某些情况下,我们可能希望利用已打开的浏览器窗口进行测试,例如,当需要在特定的...

    selenium WebDriver原理介绍

    Selenium WebDriver 是一款广泛使用的自动化测试工具,专为Web应用程序设计。它允许程序员模拟真实用户在浏览器中的操作,如点击、输入、导航等,从而进行功能性和兼容性测试。了解其工作原理对于优化自动化测试脚本...

    selenium webdriver基于python源码案例.pdf

    运行此脚本,如果能正确输出网页标题,则证明Selenium已成功安装并可正常使用。 **1.4 浏览器驱动配置** 为了使Selenium能够控制特定版本的浏览器,需要下载对应的驱动程序,并将其添加到环境变量中。 - **1.4.1 ...

    selenium WebDriver比较新的安装包

    **Selenium WebDriver** 是一个广泛使用的自动化测试工具,主要用于网页应用程序的测试。它模拟了真实用户的浏览器行为,允许测试人员编写脚本来控制浏览器执行各种操作,如点击按钮、填写表单、导航等。WebDriver ...

    selenium3.0 webdriver+python3.0实例参考

    **Selenium 3.0 WebDriver + Python 3.0 实例参考** Selenium 是一个强大的自动化测试工具,尤其适用于Web应用程序。Selenium 3.0是该框架的一个重要版本,它增强了WebDriver接口,并且提供了与多种浏览器兼容的...

    selenium_webdriver

    本节介绍如何使用 Selenium WebDriver 执行一些基本的浏览器操作。 ##### 打开浏览器 - **使用默认路径的 Firefox**:直接创建 `FirefoxDriver` 实例即可。 - **使用指定路径的 Firefox**:可以通过设置系统属性 `...

    selenium webdriver

    - 使用 `webdriver.Chrome()` 创建一个 Chrome 浏览器实例。 - `driver.get(url)` 方法加载网页。 - `driver.quit()` 退出并关闭浏览器。 #### 四、元素定位 - **3.1 id 和 name 定位**: - 使用 `find_element...

    Selenium2+Python Webdriver 如何安装浏览器驱动

    当你在使用Selenium进行自动化测试时,需要安装特定的浏览器驱动,以便Webdriver可以与浏览器交互。不同的浏览器有不同的驱动程序,而且每个驱动程序通常对应特定版本的浏览器。 3. 安装Firefox浏览器驱动 Firefox...

    Selenium WebDriver的笔记整理

    2. 创建`WebDriver`实例,通常命名为`driver`,用于与浏览器交互。 3. `@BeforeMethod`注解的方法会在每个测试方法前执行,可以用来初始化浏览器。 4. `@Test`注解的方法定义实际的测试逻辑,例如,访问网页。 5. `@...

    selenium(webdriver)+python第三版

    **Selenium + WebDriver + Python 第三版:网页自动化测试与应用** Selenium 是一个强大的开源自动化测试工具,它主要用于Web应用程序的测试。Selenium 支持多种编程语言,包括Python,使得开发者和测试工程师能够...

    selenium_webdriver学习

    WebDriver是Selenium的最新版本,它提供了一个跨浏览器的API,支持多种浏览器如Chrome、Firefox、IE等。WebDriver通过发送HTTP请求到浏览器控制台,实现了对浏览器的直接控制,使得测试脚本更接近于用户的实际操作。...

    selenium_IEWebDriver

    在Selenium框架中,IEWebDriver是专为Internet Explorer浏览器设计的一个WebDriver实现,允许开发者编写可跨浏览器运行的自动化测试脚本。 **一、什么是WebDriver?** WebDriver 是一种API,它提供了对浏览器的直接...

    Selenium Webdriver

    Selenium Webdriver是一款强大的自动化测试工具,用于模拟真实用户在浏览器中的交互行为。它支持多种编程语言,如Java、Python、C#等,且兼容多种浏览器,包括Chrome、Firefox、IE和Edge等。Selenium的核心理念是...

    selenium需要的包 模拟真实浏览器。

    # 创建 Chrome 浏览器实例 driver = webdriver.Chrome() # 访问 Google 主页 driver.get('https://www.google.com') # 查找搜索框元素 search_box = driver.find_element_by_name('q') # 输入搜索关键词 search_...

    selenium浏览器驱动下载

    # 创建Edge浏览器实例 driver = webdriver.Edge(edge_driver_path) # 访问网页 driver.get("http://www.example.com") # 进行页面操作,如查找元素、点击按钮等 # 关闭浏览器 driver.quit() ``` 除了Edge浏览器...

    selenium-WebDriver的API文档

    本文将深入探讨Selenium WebDriver API 的核心概念和使用方法。 **1. WebDriver 概念** WebDriver 是Selenium的一个关键组件,它充当了测试代码与浏览器之间的桥梁。WebDriver API允许开发者直接与浏览器通信,模拟...

    selenium_webdriver(python)第一版.pdf

    - 安装Chrome Driver/IE Driver:Selenium需要对应浏览器的WebDriver来驱动浏览器,如需使用Chrome,需要下载对应版本的ChromeDriver并配置环境变量。 3. 开始第一个脚本: 选择Python的原因可能是因为其简洁易学的...

    selenium webdirver驱动

    因此,为了获得最佳的测试效果,建议使用与目标浏览器最新稳定版兼容的Selenium WebDriver版本。 **五、实战应用** 在实际项目中,开发者会创建一个测试类,初始化WebDriver实例,编写测试用例,然后执行测试。...

    Selenium2.0之WebDriver学习总结(1)

    WebDriver不再局限于JavaScript,而是采用与浏览器内核更为直接的交互方式,如在IE中使用C++,在Firefox中使用XPCOM组件,从而能够规避JavaScript安全策略。WebDriver还允许模拟真实的键盘和鼠标操作,增强了模拟...

Global site tag (gtag.js) - Google Analytics