操作系统:Ubuntu 20.04 LTS WSL2
系统框架:Drupal8
selenium主要用于web应用程序的自动化测试,还支持所有基于web的管理任务自动化。
selenium经历了2个版本,selenium1.0和selenium2.0;selenium不是一个单独的工具,而是由一些插件、类库构成,每个组成部分都有其特点和应用场景。
selenium2.0由以下组件构成:
selenium2.0 = selenium1.0 + Webdriver
**Webdirver:**通过原生浏览器支持或扩展来直接控制浏览器,针对各个浏览器开发,与浏览器紧密集成,支持创建更高级的测试,其还可以利用操作系统级的调用,模拟用户输入;
**selenium IDE:**嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作录制与回放功能,主要用于快速创建BUG及重现脚本,可转化为多种语言;
**selenium Gird:**测试辅助工具,利用现有的计算机基础设施,实现多台计算上和异构环境中运行测试用例;
**selenium RC:**selenium的核心组件,支持多种不同语言编写自动化测试脚本,通过其服务器作为代理服务器去访问应用,达到测试的目的;
**Client Libraries:**Client Libraries库主要用于编写测试脚本,用来控制Selenium Server的库;
**Selenium Server:**负责控制浏览器行为;
Selenium Core(一个JavaScript函数集合):被嵌入到浏览器中,通过它实现用程序对浏览器进行操作;
Launcher:用于启动浏览器,把Core加载到浏览器页面当中,并把浏览器代理设置为Selenium Server的HTTP Proxy;
**Behat:**Behat是PHP的开源行为驱动开发框架。详情链接
**Mink:**Mink 是开源的 PHP 浏览器/控制器 模拟测试工具。Mink 可以模拟 Web 应用和浏览器之间的交互,测试 Web 应用的行为是否正确。详情链接
1.使用Composer安装Behat及所需的依赖包(Ubuntu20.04安装并使用Composer):
composer require --dev Behat/Behat dmore/behat-chrome-extension drupal/drupal-extension
2.初始化设置。安装包后,必须执行init命令,CD到应用程序根目录,执行以下命令,生成目录:
vendor/bin/behat --init
3.安装Mink
composer require --dev behat/mink
安装成功如图:
3,创建功能描述文件目录及文件,并配置behat.yml,如下图(生成的脚本文件暂时先忽略,一会执行完用例后才会生成):
4. 添加测试.创建UserContext.feature文件,并添加一下内容(注意格式和关键字大小写)
5,执行测试用例
vendor/bin/behat 执行所有测试用例
/vendor/bin/behat --config=./behat.yml --suite=user_features 指定测试文件
执行后会生成UserContext.php文件,以及方法(方法体需要自己根据业务功能编写,方法的参数是.feature文件中步骤中传递过来的,如图)
运行成功
如果顺利执行到这里,那么Behat和Mink就算集成成功,接下来安装mink-selenium-driver.
6.执行一下命令
composer require behat/mink-selenium2-driver
1,下载并安装VcXSrv X server for Windows,一路默认安装
.提供给你们一个下载链接
****
可以 Save configuration,保存设置。
2,在Linux命令行执行一下命令
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install xfce4
#安装成功后,打开配置文件
vim ~/.bashrc
Vim使用教程
3.打开windows的CMD,输入ipconfig,查看WSL的IPv4地址,并将该IP写入到.bashrc 文件中如图:
4.保存之后,执行如下指令。
source ~/.bashrc 让配置立即生效
5.双击Windows桌面“XLaunch”图标,打开服务;
6.Linux端执行:startxfce4,启动桌面系统;
注意:有个问题就是重启电脑后,再次启动时会报错
因为Ubuntu中的IP每次启动后都会变,所以之前保存的IP会无效,之前尝试过修改为固定IP,但都失败了,所以就摸索了一个比较繁琐但是有用的方法,那就是重复第三步,每次启动桌面前,先修改一下DISPLAY的值,然后再启动桌面,就解决了,(警告:如果对Linux系统的网络配置不熟悉的小伙伴不要轻易尝试网上的方法,我差点重装环境,但如果有有效的方法还请不吝赐教)。
在安装浏览器时要先了解浏览器对应的驱动版本和selenium服务版本,本文档使用的**火狐浏览器版本为30,selenium服务为****selenium-server-standalone-2.45.0.jar**,因为selenium2中集成了火狐浏览器47版本以下的驱动(换句话说,火狐浏览器47版本一下不用下载浏览器驱动,selenium2中已经集成好了),在这里给大家一些参考资料,动手能力强的小伙伴可以试试其它版本:
谷歌浏览器下载:https://www.chromedownloads.net/chrome64win/
谷歌浏览器驱动下载:http://chromedriver.storage.googleapis.com/index.html
谷歌浏览器与驱动对应表:https://www.cnblogs.com/yfacesclub/p/8482681.html
火狐浏览器下载:http://ftp.mozilla.org/pub/firefox/releases/
火狐浏览器驱动下载(47版本以上可以使用):https://github.com/mozilla/geckodriver/tags
火狐浏览器与驱动对应表(47版本以上):https://blog.csdn.net/qq_43592253/article/details/107080586
selenium服务下载:http://selenium-release.storage.googleapis.com/index.html
根据以上资料下载对应的浏览器版本和驱动,然后开始安装。
1,window窗口操作Linux文件,在Linux命令行输入一下命令后效果如图:
explorer.exe .
#或者使用CP复制或MV移动命令
cp和mv命令链接
2.将下载的火狐浏览器压缩包,拷贝到/user/bin,并解压:
tar -zxvf firefox-30.0.tar.bz2
cd /usr/bin #切换到bin目录
sudo ln /usr/lib/firefox/firefox firefox -s #给浏览器的二进制文件创建一个名为firefox的软连接(最好写为浏览器的名)
cd /etc/alternatives #切换到alternatives目录
rm x-www-browser #删除默认的浏览器连接
rm gnome-www-browser #删除默认的浏览器连接
创建新的默认浏览器连接
sudo ln /usr/lib/firefox/firefox x-www-browser -s
sudo ln /usr/lib/firefox/firefox gnome-www-browser -s
4.在Linux命令行输入 firefox 然后回车;
如果浏览器打开,表示配置成功,如不行,关掉ubuntu重启;
到目前为止环境配置已完成,接下来就运行我们的自动化项目:
1,编写自动登录代码(一下代码只用于参照,实际情况以实际为准):
#UserContext.feature 功能描述文件(用例)
Feature: test user login
Scenario:use username and password
Given I have a username "admin"
And I have a password "Dam_123456"
When I click login
Then I will go to my home page
'firefox',
'version' => '30',
'platform' => 'ANY',
'browserVersion' => '30',
'browser' => 'firefox',
'name' => 'Selenium2 Mink Driver',
'deviceOrientation' => 'selenium2调试测试',
'deviceType' => 'tablet',
'selenium-version' => '2.45.0'
);
echo "初始化"."\n";
echo "创建driver对象"."\n";
$this->driver = new \Behat\Mink\Driver\Selenium2Driver('firefox');
$this->driver->setDesiredCapabilities($caps);
echo "创建session对象"."\n";
$this->session = new Behat\Mink\Session($this->driver);
echo "跳转网址"."\n";
$this->session->visit('http://0.0.0.0/user/login');#IP以实际为准
echo "放大窗口"."\n";
$this->driver->maximizeWindow();
// $this->session = new \Behat\Mink\Session($this->driver);
// $this->session->visit('http://localhost/user/login');
// $this->session->start();
// $session->session_start();
// $session->visit;
}
/**
* @Given I have a username :arg1
*/
public function iHaveAUsername($name)
{
if($name!=""){
#$this->driver->wait(5000,"等待控件");
$this->driver->findElementXpaths('//*[@id="edit-name"]');
$this->driver->setValue("//*[@id='edit-name']",$name);
echo "用户名正确".$name;
}
}
/**
* @Given I have a password :arg1
*/
public function iHaveAPassword($pass)
{
if($pass!=""){
$this->driver->findElementXpaths('//*[@id="edit-pass"]');
$this->driver->setValue('//*[@id="edit-pass"]',$pass);
echo "密码正确".$pass;
}
}
/**
* @When I click login
*/
public function iClickLogin()
{
$this->driver->click('//*[@id="edit-submit"]');
echo "登录成功!";
}
/**
* @Then I will go to my home page
*/
public function iWillGoToMyHomePage()
{
$Wname = $this->driver->getValue('/html/body/div/div/div[2]/header/nav/div[1]/a/span');
echo "展示首页面!",$Wname;
}
}
2.cd 到之前下载的selenium服务目录下,并运行以下命令:
java -jar selenium-server-standalone-2.45.0.jar
2,运行测试用例
vendor/bin/behat --suite=user_features #--suite 指定测试套件(可不写,执行全部用例)