zoukankan      html  css  js  c++  java
  • 测试自动化:java+selenium3 UI自动化(2)

    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
    有软件测试,自动化测试,安全测试相关问题需要交流探讨的小伙伴,欢迎加入!

  • 相关阅读:
    Ngnix(三)—— window下布置nginx服务集群
    Java基础(一)—— 网络编程(一)—— Java Socket总结
    2018新浪Java笔试总结
    java yyyyMMddHHmmss格式字符串转换为yyyy-MM-dd HH:mm:ss格式字符串
    c# 返回多个参数(利用Tuple)
    c# 域名转换成ip地址
    myhaits if test判断字符串
    java中List转换成Json
    java打包发布程序.jar(Eclipse)
    redis设置密码
  • 原文地址:https://www.cnblogs.com/dayu2019/p/11314172.html
Copyright © 2011-2022 走看看