测试自动化:java+selenium3 UI自动化(2) - 启动Firefox
1. selenium和浏览器
基于selenium的这套自动化体系,其实现关键就在于对于各浏览器的顺畅操作。
事实上当selenium刚开始起家的时候,他使用的还是javascript注入的方式来驱动浏览器操作;而彼时Firefox还是浏览器市场上的王者,他也是selenium最早开始支持的浏览器。
selenium3时代一个很明显的改动在于,现在启动Firefox,你需要一个驱动了:也就是geckodriver。
2. 工具准备
接下来准备好浏览器以及相关工具:
- Firefox客户端:本文使用版本firefox52 32位
- geckodriver:本文使用版本geckodriver v0.24.0
- selenium类库:本文使用版本selenium-server-standalone-3.141.59
3. 代码实现
在新建的项目上右键,选择新建一个class,并勾选public static void main,写入以下代码:
package seleniumTest;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class test {
public static void main(String[] args) {
//通过配置系统变量指定火狐客户端位置
System.setProperty("webdriver.firefox.bin", "D:/Firefox52_32/firefox.exe");
//通过配置系统变量指定geckodriver位置
System.setProperty("webdriver.gecko.driver", "D://geckodriver.exe");
//实例化一个FirefoxDriver
WebDriver driver = new FirefoxDriver();
//最大化窗口
driver.manage().window().maximize();
//设置隐式等待为10秒
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//浏览到百度网站
driver.get("http://www.baidu.com");
//控制台打印页面标题
System.out.println(driver.getTitle());
//浏览器关闭
driver.quit();
}
}
运行代码,一切顺利的话应该看到如下结果:

4. 补充问题
实际上启动浏览器这部分代码可以说是非常简单的,但是也经常容易遇到问题。
例如:
- org.openqa.selenium.WebDriverException: connection refused
- org.openqa.selenium.SessionNotCreatedException: Unable to find a matching set of capabilities
- 又或者网页可以打开,却无法执行任何操作
等等诸如此类的错误,基本上都是由于selenium、浏览器driver和浏览器客户端三者的支持关系造成的。
要避免以上问题,需要做下面几件事情:
4.1 确定所测浏览器版本
应项目需求,选定特定的浏览器版本。比如本文使用的是firefox52 32位版本。
一经确定,关闭浏览器自动更新。因为正如前文所说,浏览器和selenium等存在对应关系,一旦浏览器自动更新,可能导致selenium类库和driver无法支持的问题。
有的人可能会觉得我的项目需要跟上浏览器更新的步骤,但你不需要在UI自动化里强行去验证这一点,否则你会丧失自动化的稳定性,增加配置和调试工作量。你可以选择在合适的时间点更新浏览器、selenium和driver,但这些应该是可控的,而不是让浏览器去自动更新导致你的工作混乱。
火狐的历史版本可以在这里找到:http://ftp.mozilla.org/pub/firefox/releases/
由于我们使用固定版本的浏览器,那么顺带也推荐从固定位置启动,即代码中的“通过配置系统变量指定火狐客户端位置”相关语句。
4.2 找到对应的selenium和geckodriver版本
selenium和geckodriver支持特定的浏览器版本,这里是一个向下兼容的概念。也就是说越新的selenium类库和geckodriver可以支持越新的浏览器,同时兼容旧版本浏览器。
因此在确定了你要使用的浏览器版本,接下来找到相应确定支持该浏览器的selenium和geckodriver即可。
如果你用的是比较新的浏览器版本,那么最好也找到最新的selenium和驱动。
本文使用的是:
- selenium-server-standalone-3.141.59
- geckodriver v0.24.0
最后,浏览器和geckodriver都有32位和64位之分,注意一下这个问题。
下一篇来解析firefox浏览器的带profile启动。
软件测试交流群:717380210
有软件测试,自动化测试,安全测试相关问题需要交流探讨的小伙伴,欢迎加入!
测试自动化:java+selenium3 UI自动化(2) - 启动Firefox的更多相关文章
- 测试自动化:java+selenium3 UI自动化(1) - 环境搭建
1.前言 我大概是在2012年第一次正式接触到自动化测试,那个时候跟随我的团队一起,就当时项目的UI自动化尝试做出了探索. 在我离开那家公司的时候,我们的自动化测试体系仍然难言完美,但是也已经达到了非 ...
- 基于Selenium2+Java的UI自动化(2) - 启动浏览器
一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...
- 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍
1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...
- ui自动化笔记 selenium_webdriver,ui自动化框架(web)
Selenium学习笔记 selenium webdriver是业界公认ui自动化测试的标准,其封装的api可以对浏览器的任何地方进行操作 selenium2.0和selenium3.0的区别? 3. ...
- 【web系统UI自动化】关于UI自动化的总结
实施过了web系统的UI自动化,回顾梳理下,想到什么写什么,随时补充. 首先,自动化测试不是手动测试的替代品,是比较好的补充,而且不是占大比重的补充. 70%的测试工作集中在底层接口测试和单元测试,2 ...
- 基于Selenium2+Java的UI自动化(1) - 原理和环境搭建
一.Selenium2的原理 Selenium1是thoughtworks公司的一个产品经理,为了解决重复烦躁的验收工作,写的一个自动化测试工具,其原理是用JS注入的方 式来模拟人工的操作,但是由于J ...
- 【java+selenium3】自动化基础小结+selenium原理揭秘 (十七)
一.自动化实现原理 1.创建驱动对象 (1) 首先加载浏览器安装目录下的exe文件 (2) 其次是加载可执行驱动的exe文件,监听等待客户端发送的web service请求. 底层原理如下: 1. ...
- 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待
一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...
- 【java+selenium3】自动化处理文件上传 (十三)
一.文件上传 文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,如AutoIt.sikuli. AutoIt , 这是一个使用类似BASIC脚本语言 ...
随机推荐
- 嵊州D4T2 硬币 有人来教教我吗!
嵊州D4T2 硬币 [问题描述] 卡拉赞的展览馆被入侵了. 展览馆是一条长长的通道,依次摆放着 n 个展柜(从西到东编号依次 为 1—n). 入侵者玛克扎尔在第 n 个展柜东边召唤了一个传送门,一共施 ...
- CDQZ集训DAY2 日记
依然很爆炸. T1上来有50分暴力分,打完后注意到了后50分的随机数据,开始想怎么去对付他.然后就开始思考随机数据意味着什么.想了想,想打一个扫描线或者分治.决策了一下还是打了一个扫描线+链表.然而只 ...
- 2019.6.16完成classstack任务
最终信息 4 ShineEternal 任务完成,账号已注销 120 149 80.537%
- 洛谷P2001 硬币的面值 题解
题目链接:https://www.luogu.org/problemnew/show/P2001 这题的数据范围吓得我很慌. 分析: 这道题蒟蒻本来想用背包的,但是发现m太大,一写肯定炸,然后看到数据 ...
- NOIP2018初赛题解 提高组
- 个人永久性免费-Excel催化剂功能第68波-父子结构表转换之父子关系BOM表拆分篇
Excel中制造业行业中,有一个非常刚需的需求是对BOM(成品物料清单)的拆解,一般系统导出的BOM表,是经过压缩处理的,由父子表结构的方式存储数据.对某些有能力使用SAP等专业ERP软件的工厂来说, ...
- [leetcode] 62 Unique Paths (Medium)
原题链接 字母题 : unique paths Ⅱ 思路: dp[i][j]保存走到第i,j格共有几种走法. 因为只能走→或者↓,所以边界条件dp[0][j]+=dp[0][j-1] 同时容易得出递推 ...
- Masstransit的应用服务总线
Masstransit 是一个非常优秀的基于消息进行通信的分布式应用程序框架,详情参考官网. 在介绍AA.ServiceBus之前,先介绍下几个概念. 分布式 分布式系统如何定义?这里引用一下Dist ...
- 使用Docker运行SQL Server
现在.net core已经跨平台了,大家也都用上了linux用上了docker.跟.net经常配套使用的SQL SERVER以前一直是windows only,但是从SQL Server 2017开始 ...
- PhpCms V9中的{date('Y-m-d',$r[inputtime])}问题解决方法
不少朋友会碰到这个问题:在PhpCms V9中的首页或者文章内容页调用发布时间{date('Y-m-d',$r[inputtime])}调用显示1970-01-01,然后尝试用截断的方法也没有成功,应 ...