`
m635674608
  • 浏览: 5029172 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

selenium webdriver 以署理proxy方式启动firefox,ie,chrome

    博客分类:
  • java
 
阅读更多

本文是在Webdriver 2.12.0下面测试得到的结论


2. webdriver的maven配置

  <repositories> <repository> <id>selenium</id> <name>selenium</name> <url>;/url> </repository> </repositories> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.12.0</version> </dependency> </dependencies>




3. webdriver中firefox以代理方式启动
普通情况下,firefox的代理修改是直接修改其配置文件,即prefs.js,把对应的配置修改掉

  user_pref("network.proxy.ftp_port", 1000); user_pref("network.proxy.gopher", "10.0.0.0"); user_pref("network.proxy.gopher_port", 1000); user_pref("network.proxy.http", "10.0.0.0"); user_pref("network.proxy.http_port", 1000); user_pref("network.proxy.no_proxies_on", ""); user_pref("network.proxy.share_proxy_settings", true); user_pref("network.proxy.socks", "10.0.0.0"); user_pref("network.proxy.socks_port", 1000); user_pref("network.proxy.ssl", "10.0.0.0"); user_pref("network.proxy.ssl_port", 1000); user_pref("network.proxy.type", 1);



firefoxdriver初始化时,我们可以通过配置FirefoxProfile,来修改上面的配置,特别要注意的是localhost的配置,请看下述例子:

  String proxyIp = "localhost"; int proxyPort = 8080; FirefoxProfile profile = new FirefoxProfile(); // 使用代理 profile.setPreference("network.proxy.type", 1); // http协议代理配置 profile.setPreference("network.proxy.http", proxyIp); profile.setPreference("network.proxy.http_port", proxyPort); // 所有协议公用一种代理配置,如果单独配置,这项设置为false,再类似于http的配置 profile.setPreference("network.proxy.share_proxy_settings", true); // 对于localhost的不用代理,这里必须要配置,否则无法和webdriver通讯 profile.setPreference("network.proxy.no_proxies_on", "localhost"); // 以代理方式启动firefox FirefoxDriver ff = new FirefoxDriver(profile); ff.get(""); ff.quit();



4. webdriver中IE以代理方式启动,chrome类似
方式不同于firefox,这里是利用webdriver提供的Proxy和WindowsProxyManager来处理,这里也要特别注意localhost的处理。


处理步骤为:
1. InternetExplorerDriver初始化时,调用WindowsProxyManager的backupRegistrySettings方法保存老的代理配置
2. 调用WindowsProxyManager的changeRegistrySettings方法类修改代理配置
3. 程序运行结束后,调用WindowsProxyManager的restoreRegistrySettings来恢复到老的配置。
特别需要提醒的是第3条,我认为webdriver这里处理的不好。恢复到默认配置是在程序结束后,如果程序启动了多个InternetExplorerDriver,每个InternetExplorerDriver保存的是该InternetExplorerDriver启动时IE的配置,而程序结束是调用的shutdownhooker,同时恢复,线程的运行快慢不确定,最后是否恢复到初始配置还很难说,所以,如果同个程序只启动一个InternetExplorerDriver,使用webdriver自带的初始InternetExplorerDriver时修改代理是没有问题,如果启动多个,就要采取其他方式,可以参看本文的第5部分。

程序只启动一个InternetExplorerDriver,以代理模式启动的代码如下:

  String proxyIpAndPort= "localhost:8080"; // 代理配置 DesiredCapabilities cap = new DesiredCapabilities(); org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); // 配置http、ftp、ssl代理(注:当前版本只支持所有的协议公用http协议,下述代码等同于只配置http) proxy.setHttpProxy(proxyIpAndPort) .setFtpProxy(proxyIpAndPort) .setSslProxy(proxyIpAndPort); // 以下三行是为了避免localhost和selenium driver的也使用代理,务必要加,否则无法与iedriver通讯 cap.setCapability(CapabilityType.ForSeleniumServer.AVOIDING_PROXY, true); cap.setCapability(CapabilityType.ForSeleniumServer.ONLY_PROXYING_SELENIUM_TRAFFIC, true); System.setProperty("http.nonProxyHosts", "localhost"); cap.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new InternetExplorerDriver(cap); driver.get(""); driver.close();



InternetExplorerDriver初始化后,IE对应的代理配置为:
381x309

打开上图中的代理配置文件,可以看到下述配置,具体的可以自己查阅资料:

  function FindProxyForURL(url, host) { if (shExpMatch(host, 'localhost')) { return 'DIRECT'; } if (shExpMatch(url, '*/selenium-server/*')) { return 'PROXY localhost:0; DIRECT'; } return 'PROXY 10.16.16.38:3229'; }



程序结束后,恢复原来配置
370x253

5. ie和chrome,手动存储老的代理、修改代理、恢复代理
这里同样使用的是webdriver提供的Proxy和WindowsProxyManager,只不过是我们显示调用而已,不让webdriver帮我们处理。几个接口,我在上面也提起过,这里就直接上代码了。

  final WindowsProxyManager proxyManager = new WindowsProxyManager(true, "webdriver-ie", 0, 0); // 备份老代理配置 proxyManager.backupRegistrySettings(); // 增加hooker,jvm退出时,把代理修改为之前的。当然,这里可以自己决定什么时候恢复,比如,在每次InternetExplorerDriver关闭后掉用 new Thread() { @Override public void run() { proxyManager.restoreRegistrySettings(true); } }; // 修改代理 DesiredCapabilities cap = changeProxy("localhost",8080); proxyManager.changeRegistrySettings(cap); // 启动ie WebDriver driver1 = new InternetExplorerDriver(cap); driver1.get(""); driver1.close(); // 再次修改代理 DesiredCapabilities cap2 = changeProxy("localhost",80); proxyManager.changeRegistrySettings(cap); // 再次启动ie WebDriver driver2 = new InternetExplorerDriver(cap); driver2.get(""); driver2.close();

 

分享到:
评论

相关推荐

    selenium webdriver+chrome插件.zip

    【标题】"selenium webdriver+chrome插件.zip" 涉及的核心知识点是Selenium WebDriver,特别是它在Chrome浏览器中的应用以及与Firefox的交互。这个压缩包包含了Selenium IDE的Chrome插件,以及对应的WebDriver驱动...

    Selenium WebDriver实战宝典(吴晓华)

    本书是一本从入门到精通模式的Selenium WebDriver实战经验分享书籍。全书共分为四个部分:第1部分基础篇主要讲解自动化测试相关的基础理论、WebDriver 环境安装、单元测试工具的使用方法以及 WebDrvier的入门使用...

    selenium WebDriver原理介绍

    WebDriver 支持多种操作系统(如Windows、Linux、MacOS)和多种浏览器(如Chrome、Firefox、Edge、IE等),每种浏览器都有相应的驱动程序(如ChromeDriver、GeckoDriver、EdgeDriver、IEDriverServer)。...

    Selenium webDriver(chrome和Firefox)

    以下是一个简单的Python示例,展示如何用Selenium WebDriver启动Chrome和Firefox浏览器,访问一个网页并获取页面标题: ```python from selenium import webdriver # 启动Chrome chrome_driver_path = 'path/to/...

    selenium WebDriver比较新的安装包

    WebDriver 支持多种浏览器,包括 Chrome、Firefox、IE、Safari 等,且具有跨平台的能力,可以在Windows、Linux、Mac OS等操作系统上运行。 标题中的“比较新的安装包”意味着我们关注的是Selenium WebDriver的最新...

    python +selenium webdriver 学习借鉴

    我们可以使用浏览器工具来检查页面元素结构,如 Firefox 的 Firebug 插件、Chrome 的开发者工具、IE 的 F12 开发者工具等。 使用 findElement 方法定位元素 findElement 方法是 Selenium WebDriver 中的一个基本...

    Selenium WebDriver 所需jar包

    Selenium WebDriver是一款强大的自动化测试工具,它允许程序员模拟真实用户在...在导入时,确保遵循Java的依赖管理规则,避免版本冲突,同时注意将驱动程序路径设置正确,以保证WebDriver能找到并启动正确的浏览器。

    selenium webdriver基于python源码案例.pdf

    Selenium 2默认支持Firefox浏览器,对于其他浏览器如Chrome和IE则需要下载相应的驱动并添加到环境变量中。 - **Selenium 3**:发布于2016年10月左右,对Firefox的支持进行了调整,最高支持版本为46及以下版本。对于...

    Selenium WebDriver实战(JAVA版本)

    selenium webdriver是web自动化的一本经典著作,吴老集合python java不同版本。本资源为java版本,内容较新,无论是入门还是提升都有很大帮助。

    Selenium WebDriver Practical Guide

    不同的浏览器,如Chrome、Firefox、IE等,都有自己的驱动程序。 此外,书籍内容中提及的“Automation Framework”(自动化框架),是指一套用于开发可重用测试脚本的结构或模板,这些框架通常包括组件、库、测试...

    selenium webdriver第三版

    Selenium WebDriver是一个开放源代码的API,允许开发人员编写脚本来控制不同的浏览器,如Chrome、Firefox、Edge等。它的核心理念是提供一种跨平台、跨浏览器的统一接口,使得测试脚本可以在不同环境中无缝运行。 二...

    selenium webdriver基于python源码案例.zip

    1. **Selenium WebDriver基本概念**:讲解Selenium WebDriver的工作原理,包括如何安装WebDriver驱动,以及它如何与不同的浏览器(如Chrome、Firefox等)交互。 2. **Python环境搭建**:介绍如何配置Python环境,...

    Selenium Webdriver operadriver_win64

    Selenium 支持多种编程语言,如Java、Python、C#和Ruby,以及多种浏览器,包括Chrome、Firefox、Internet Explorer和Opera等。 **Operadriver** Operadriver,也称为Opera WebDriver,是Selenium Webdriver的一个...

    seleniumwebdriver chrome 完整例子无需搭建

    标题 "selenium webdriver chrome 完整例子无需搭建" 暗示了这是一个关于使用Python的Selenium WebDriver与Chrome浏览器进行自动化测试的实例,且无需预先安装Chrome浏览器。在这个压缩包中,用户可以找到一个便携版...

    selenium webdriver 3 practical guide 第二版

    Selenium WebDriver 3 Practical Guide will walk you through the various APIs of Selenium WebDriver, which are used in automation tests, followed by a discussion of the various WebDriver implementations...

    Selenium WebDriver的工作原理.docx

    Selenium WebDriver 是一款强大的自动化测试工具,用于模拟真实用户在浏览器上的交互行为。其工作原理主要涉及自动化测试代码、浏览器驱动和浏览器这三个关键组件。我们可以将这个过程类比为出租车服务,其中工程师...

    Selenium Webdriver使用已打开的浏览器

    它支持多种浏览器,如Chrome、Firefox、IE等,使得测试脚本可以在不同的浏览器环境下运行。标题"使用已打开的浏览器"提示我们将讨论如何利用Selenium与已启动的浏览器实例进行交互,而非每次都启动一个新的浏览器...

    Selenium WebDriver中使用By.Xpath快速定位页面元素

    Selenium WebDriver 中使用 By.Xpath 快速定位页面元素 Selenium WebDriver 是一个自动化测试工具,可以模拟用户交互来对 Web 应用程序进行测试。其中,定位页面元素是自动化测试的关键步骤。By.Xpath 是一种快速...

Global site tag (gtag.js) - Google Analytics