我是靠谱客的博主 安静绿茶,最近开发中收集的这篇文章主要介绍阅读Selenium源码——从FirefoxDriver类实现说起一、入门三、发展四、尾声,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

摘要:在Selenium的使用过程中,驱动浏览器始终是最为重要的一环,因此,从此处入手更容易理解Selenium的架构和原理。此篇文章将以Firefox浏览器为例,浅析Selenium的驱动模式,以期裨益。


一、入门


Selenium启动firefox主要有两种方式:

1.启动本机Firefox的WebDriver,执行默认配置;

2.启动远程WebDriver,进一步操控Firefox动作,此为Selenium Grid的启动方式;


本质上来讲,两种启动方式并无太大区别,本机亦可被视为远程的一种特殊情况。为了简便,本文便以第一种启动方式为例,探究Selenium的启动机制。


在利用Selenium搭建自动化测试框架的过程中,通常采用下面这种形式:

 WebDriver driver = new FirefoxDriver(); 

这是最简便的一种方式,所有的设置都来自于Selenium默认的配置。当然,如果你的Firefox不是安装在默认路径下,你可能需要下面这样的设置:

System.setProperty("webdriver.firefox.bin","E:/Program Files/Mozilla Firefox/firefox.exe");//指定firefox的安装路径
WebDriver driver = new FirefoxDriver();

如果你在启动脚本的过程中发现firefox总是打开欢迎或者向导等页面,你也可能需要进行下面的设置:

FirefoxProfile profiles = new FirefoxProfile();
profiles.setPreference("browser.startup.homepage", "about:blank");
profiles.setPreference("startup.homepage_welcome_url", "about:blank");
profiles.setPreference("startup.homepage_welcome_url.additional", "about:blank");
WebDriver driver = new FirefoxDriver(profiles);


如果你还有其他的问题和需要,可以点击这里


二、初窥


在FirefoxDriver类中,继承了RemoteWebDriver类,Selenium的核心基类,在下面具体说明。

FirefoxDriver的结构

FirefoxDriver具有九个构造函数,为了简单,我们从最底层的构造函数开始

 public FirefoxDriver(FirefoxBinary binary, FirefoxProfile profile,
Capabilities desiredCapabilities, Capabilities requiredCapabilities) {
this(createCommandExecutor(populateProfile(profile, desiredCapabilities), binary, profile),
populateProfile(profile, desiredCapabilities), requiredCapabilities);
this.binary = binary;
}

四个参数,


FirefoxBinary binary  firefox的二进制文件。FirefoxBinary类通过调用Executable类去查找Windows/Mac/UNIX系统中的 firefox二进制文件。点击查看细节


FirefoxProfile profile   firefox的配置文件。


Capabilities desiredCapabilities    用来描述用户请求Session的特征。


Capabilities requiredCapabilities  与上一个类似,但是这部分Selenium并未赋予实际功能,一般为空。

两个重要函数,


createCommandExecutor(populateProfile(profile, desiredCapabilities), binary, profile)    创建一个与server或者本地建立http连接并接受command的executor,这里默认连接本地。

populateProfile(profile, desiredCapabilities)    从desiredCapabilities中加载关于浏览器设置的信息到profile。


三、发展


在完成步骤二后,调用父类RemoteWebDriver的构造函数。

1.加载日志和profile,这个工作由init(desiredCapabilities, requiredCapabilities )函数完成;

2.startClient()操作,这个函数默认没有任何操作,需要在子类中具体实现,然而FirefoxDriver类并没有重写这个函数

3.startSession(desiredCapabilities, requiredCapabilities),启动session,程序的最终目标,经过前面的各种设置之后启动符合条件的session。


四、尾声

一般来讲,我们都会用WebDriver类型的对象来进行下一步的定位和页面流转。因为RemoteWebDriver实现了WebDriver接口,FirefoxDriver又是RemoteWebDriver的子类。因此,为了避免FirefoxDriver类中过多操作、函数、变量的冗杂,只采用最基础的类型。在这里我只简单介绍了FirefoxDriver类的实现过程,并没有过多的涉及其内部具体方法。你可以点击这里来了解更多。

















最后

以上就是安静绿茶为你收集整理的阅读Selenium源码——从FirefoxDriver类实现说起一、入门三、发展四、尾声的全部内容,希望文章能够帮你解决阅读Selenium源码——从FirefoxDriver类实现说起一、入门三、发展四、尾声所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部