Selenium IDE工具总结.docx
- 文档编号:3306748
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:13
- 大小:22.65KB
Selenium IDE工具总结.docx
《Selenium IDE工具总结.docx》由会员分享,可在线阅读,更多相关《Selenium IDE工具总结.docx(13页珍藏版)》请在冰豆网上搜索。
SeleniumIDE工具总结
SeleniumIDE工具总结
基本介绍:
Selenium工具专门为WEB应用程序编写的一个验收测试工具。
Selenium的核心:
browserbot,是用JAVASCRIPT编写的。
Selenium工具有4种:
SeleniumIDE,SeleniumControl,SeleniumCore
这儿我们主要总结了Selenium-IDE工具
Selenium-IDE只限于firefox浏览器中使用。
Selenium命令分成三类:
操作(action)、辅助(accessors)和断言(assertion):
操作action:
模拟用户与Web应用程序的交互。
一般用于操作应用程序的状态。
如点击链接,选择选项的方式进行工作。
如果一个动作执行失败,或是有错误,当前的测试将会停止执行。
操作中常见命令有:
open(打开页面)
click(点击)
clickAndWait(点击并等待)
type(文本类型)
select(选择下拉菜单)
selectWindow(选择弹出窗口)
pause(等待指定时间,以毫秒为单位,即要睡眠的时间)
setSpeed(设定执行速度。
以毫秒延迟间隔长度。
默认没有延迟,即为0)
setTimeout(指定等待动作完成的等待时间。
默认为30秒。
需要等待的动作包括了OPEN和WAITFOR)
goBack(模拟用户点击其浏览器上的“back”按钮)
close(模拟用户点击弹出窗体或表单标题栏上的”关闭”按钮)
click与clickAndWait的区别:
例如对比录制脚本:
ComandTarget
clickcss=input[type=submit]//句一
clickAndWaitcss=input[type=submiit]//句二
转成PHPUNIT后代码为:
$this->click("css=input[type=submit]");//此句对应上面的句一
$this->click("css=input[type=submit]");//此句和下一句,对应上面的句二
$this->waitForPageToLoad("30000");
区别在于:
clickAndWait后会有一个默认的页面等待时间为30秒;而click没有等待时间;
Andwait这个后缀,告诉我们,该命令将使浏览器向服务器产生一个请求,使
Selenium等待加载一个新的页面。
辅助accessors:
这是辅助工具。
用于检查应用程序的状态并将结果存储到变量中。
如:
storeElementPresent(locator,variableName)
其中参数:
locator表示元素定位器;variableName用于存储结果的变量名。
即将locator定位到的状态存储到variableName变量中。
如果该元素出现返回true,否则返回false
可同断言一同使用。
断言assertion:
验证应用程序的状态是否同所期望的一致。
常见的断言包括:
验证页面内容,如标题是否为X或当前位置是否正确,或是验证该
复选框是否被勾选。
断言被用于三种模式:
assert、verify、waitfor
Assert失败时,该测试将终止。
Verify失败时,该测试将继续执行,并将错误记入日显示屏。
也就是说允许此单个
验证通过。
确保应用程序在正确的页面上。
Waitfor用于等待某些条件变为真。
可用于AJAX应用程序的测试。
如果该条件为真,他们将立即成功执行。
如果该条件不为真,则将失败并暂停测试。
直到超过当前所设定的超时时间。
一般跟setTimeout时间一起用
断言常用的有:
assertLocation(判断当前是在正确的页面)、
assertTitle(检查当前页面的title是否正确)、
assertValue(检查input的值,checkbox或radio,有值为”on”无为”off")、
assertSelected(检查select的下拉菜单中选中是否正确)、
assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
assertText(检查指定元素的文本)、
assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、assertAttribute(检查当前指定元素的属性的值)、
assertTable(检查table里的某个cell中的值)、
assertEditable(检查指定的input是否可以编辑)、
assertNotEditable(检查指定的input是否不可以编辑)、
assertAlert(检查是否有产生带指定message的alert对话框)
waitForElementPresent(等待检验某元素的存在。
为真时,则执行。
)
具体实现中出现的问题:
将录制的脚本转成PHPUNIT在服务器端运行总失败。
开始要作如下工作:
1.在setUp()函数中添加语句:
每次脚本运行,都将清空数据库的语句
`/home/www/selenium-php/yuezhan/rebuilddb.sh`;注意:
用倒斜杠,数字1左边的键
//根据项目需要而修改;
2.将默认的浏览器代码修改:
将$this->setBrowser("*chrome");
改成$this->setBrowser("*firefox");
可以不用修改代码的方法:
Selenium工具OptionsOptions选择Formats选项卡
选择PHP-PHPUNIT将Environment里的浏览器改成firefox即可,
这样子录制的脚本转化成PHP后,也就不用修改此部分代码了。
3.在第2点的基础上,在上面添加两句代码:
$this->setHost("192.168.8.24");
$this->setPort(4445);//此句可以不加,根据自己服务器端口而定
4.录制的脚本中如有上传图片的路径。
也要根据服务器所在的环境作修改。
如在同一环境下可不作修改。
不在同一环境下,要将图片路径修改成服务器环境中图片所在的路径下。
5.录制的脚本一定要从登录开始录制。
在没有解决COOIKE之前,必须这么做。
运行脚本时,
常见问题1:
报错:
ERROR:
TherewasanunexpectedAlert!
[ajax错误].
错误原因:
AJAX错误,没有找到ALERT提示的框架,因而报异常错误
解决方法一:
$this->click("css=input[type=submit]");这是一个“下一步”按钮。
进入的页面中,有AJAX。
可以此句前面添加:
setSpeed(1000)让其执行速度变慢1秒。
具体php代码:
$this->setSpeed("1000")//从下一句开始,执行速度放慢
$this->click("css=input[type=submit]");
$this->waitForPageToLoad("30000");
$this->type("name=player[player1][name]","元一");
$this->setSpeed("0")//恢复到正常执行速度
根本的解决方法:
$this->waitForCondition("selenium.browserbot.getUserWindow().jQuery.active==0","3000");//此处3000,即限定的超时时间timeout。
$this->click("css=input[type=submit]");
解释waitForCondition用法:
waitForCondition(JavaScriptSnippet,time)
-在限定时间内,等待一段JavaScript代码返回true值,超时则停止等待
其中"selenium.browserbot.getUserWindow().jQuery.active==0"这是一段javascript语句,
意思:
检查得到的窗体里AJAX的活动数量为0时,则为0即无AJAX活动了,则为真,为真就可以继续向下运行。
反之,在限定的timeout3秒时间内,活动数仍不为0,则会报错。
常见的框架:
jQuery:
“jQuery.active”
Prototype:
“Ajax.activeRequestCount”
Dojo:
“dojo.io.XMLHTTPTransport.inFlight.length
我们用的是jQuery框架,即写成jQuery.actiive
3000是限时3秒。
不正确的解决方法:
for($second=0;;$second++){
if($second>=60)$this->fail("timeout");
try{
if($this->isElementPresent("css=input[type=submit]"))break;
}catch(Exception$e){}
sleep
(1);
}
此处用的方法:
waitForElementPresent(locator,variableName)验证指定元素在页面上。
此方法解决AJAX错误时无效。
其检验元素的方法,可解决javascript的问题。
常见问题4中会详解。
常见问题2:
服务器连接不上。
解决方法:
目前我们服务器上同时只能边接两台机器。
所以,这儿的解决方法,只能限于两台哦。
常见问题3:
超时timeout
错误原因:
在服务器上跑,页面加载时间有时会变的慢
解决方法一:
页面加载时间修改一下。
延长页面加载时间
原语句:
$this->waitForPageToLoad("30000");
可更改为:
$this->waitForPageToLoad("60000");
解决方法二:
将运行速度放慢,在页面加载时间前一句加如下语句
$this->setSpeed("1000")//运行速度放慢
当然,页面加载完之后,可以提交接钮语句之后,加如下语句,将运行速度恢复到正常。
$this->setSpeed("0")//恢复到正常执行速度
常见问题4:
登录时,没有发现某个元素。
[error]Elementid=usernamenotfound
如,我们虎扑网站,当前状态为未登录。
先点击进入论坛页面。
然后点击“登录”,
录制的脚本,在回放中,会错误。
没有该元素。
例如录制脚本:
ComandTargetValue
open/
clicklink=登录
typeid=usernameadmin
typeid=passwordadmin
………………
clickAndWaitlink=退出
转成PHPUNIT后代码为:
$this->open("/");
$this->click("link=登录");
$this->type("id=username","admin");
$this->type("id=password","admin");
…………
$this->click("link=退出");
回放时,到了用户名那一句,就会报无法找到元素的错误。
错误原因:
登录时,会弹跳出一个登录对话框。
此对话框即是Javascript语句写的。
解决方法:
用waitForElementPresent方法,其方法是检查页面上的元素是否存在。
登录之后的语句,都是JAVASCRIPT语句执行之后出现的。
建议检验最后一个可输入元素。
例如录制脚本:
ComandTargetValue
open/
clicklink=登录
waitForElementPresentid=password//此句为添加的辅助代码,检查元素
typeid=usernameadminuser
typeid=passwordadminpwd
………………
clickAndWaitlink=退出
转成PHPUNIT后代码为:
$this->open("/");
$this->click("link=登录");
for($second=0;;$second++){
if($second>=60)$this->fail("timeout");//超过60秒,则报超时错误
try{
if($this->isElementPresent("id=password"))break;//检查用户名这个元素
}catch(Exception$e){}
sleep
(1);
}
$this->type("id=username","adminuser");
$this->type("id=password","adminpwd");
…………
$this->click("link=退出");
上述中selenium中的waitForElementPresentid=password这一句,转化成PHPUNIT代码后,即是for循环代码那一段。
在PHPUNIT中也可以直接添加该段代码。
且完全可以将for循环代码这一段替换成:
$this->waitForElementPresent("id=password");
这样单独的一句。
完全可以只写这一句,也可以达到检查这个元素的效果。
解释waitForElementPresent用法:
waitForElementPresent(locator)等待指定元素出现在页面上。
常见问题5:
录制时必须从登录开始录制,那么有没有什么办法可以解决呢。
解决方法:
如下PHPUNIT代码:
php
`/home/www/selenium-php/yuezhan/rebuilddb.sh`;//数据库初始化
classHCYZ_LoginTestextendsPHPUnit_Extensions_SeleniumTestCase
{
privatestatic$YZLoginCookie;//定义了一个私有的静态变量,变量名为YZLoginCookie
protectedfunctionsetUp()
{
$this->setHost("192.168.8.24");
$this->setPort(4445);
$this->setBrowser("*firefox");
$this->setBrowserUrl("http:
//kangying.yuezhanerqi.test.hc.sf/");
}
publicfunctiontestLogin()//这个类就是测试登录。
{
$this->open("backend_test.php/om_match");//打开后台URL
$this->type("name=backend_user[username]","康莹");
$this->type("name=backend_user[password]","kangying");
$this->click("css=input.button");
$this->waitForPageToLoad("30000");
self:
:
$YZLoginCookie=$this->getCookieByName("symfony");//下面详细解释。
}
publicfunctiontestOmMatch()//这个类就是测试约战二期的。
{
$this->open("backend_test.php/om_match");//要注意这儿要先打开约战二期的URL
$this->createCookie("symfony=".self:
:
$YZLoginCookie,"path=/");//下面详细解释
$this->open("backend_test.php/om_match");//注意,创建完COOKIE要再打开下URL
}
}
解释下面两句:
1.self:
:
$YZLoginCookie=$this->getCookieByName("symfony");
Symfony这个参数是SESSION名。
getCookieByName这是一个取得Cookie值的方法。
并将取的到值放到YZLoginCookie变量中。
因为YZLoginCookie变量是私有的。
在PHPUNIT中,私有变量的引用就这么写:
self:
:
$变量名
这个我们不要太懂。
就记住,定义变量时用的是private,那么用这个变量时,前面加
Self:
:
(注意:
这儿的两个冒号,必须是半角状态下的冒号)就可以了。
2.$this->createCookie("symfony=".self:
:
$YZLoginCookie,"path=/");
createCookie()这个就是创建Cookie的方法
它的参数是刚刚self:
:
$YZLoginCookie变量中的值。
将其创建好的Cookie存放到path=/这个路径下
常见问题6:
运行PHPUNIT代码时报类似如下错:
Failedassertingthat false>istrue.错误原因: 此处错误存在于断言检查中。 检查出来返回的值是失败的。 解决方法: 1.检查断言语句是没有放错位置。 应将语句放置要检查代码的上一行 2.主要检查引号中里面的语句有无错误。 比如: $this->waitForElementPresent("必须填写"); 这里面与页面中有出入。 应为 $this->waitForElementPresent("必需填写"); 再比如: $this->waitForElementPresent("css=input[typ=button"); 这里应该为: $this->waitForElementPresent("css=input[type=button]"); 少了右边的中括号,还有type的e 先看有没有少写了括号或中括号;再来检查单词有无编写错误。 以及有无错别字的错误。 常见问题7: 运行PHPUNIT代码时报类似如下错: Parseerror: syntaxerror,unexpectedT_IFin/home/www/selenium-php/zhaomu.phponline44 错误原因: 第44行。 提示有代码错误。 解决方法: 检查第44行以及44附近的行。 先看有没有少写了分号;然后看编写或复制代码时,有无加了代码行的编号(即代码前的数字);最后检查单词有无编写错误。 常见问题8: 运行PHPUNIT代码时报类似如下错: PHPUnit_Framework_Exception: ResponsefromSeleniumRCserverfortestComplete(). ERROR: Therewerenoalerts. 错误原因: PHPUNIT中框架异常出错。 它找的错误原因,没有Alert。 这里alert是一个提示信息,一般出现在当前窗体中以弹层方式显示的确认对话框。 解决方法: 在确认对话框提示代码的上一行,添加一段等待审核提示信息即可。 方法一、可以直接在selenium中,在弹出提示框代码的上一行。 例如录制脚本: ComandTargetValue open/backend_test.php/om_match clicklink=招募 ……………… clickcss=input[type=button] waitForAlertPresent//此句添加断言,等待警告/提示框 assertAlert请等待信息审核 ……………… 保存,转成PHPUNIT后代码为: $this->open("/backend_test.php/om_match"); $this->click("link=招募"); …………………… $this->click("css=input[type=button]"); for($second=0;;$second++){ if($second>=60)$this->fail("timeout"); try{ if($this->isAlertPresent())break;//检查Alert警告/提示框 }catch(Exception$e){} sleep (1); } $this->assertEquals("请等待信息审核",$this->getAlert()); 上述中selenium中的waitForAlertPresent这一句,转化成PHPUNIT代码后,即是for循环代码那一段。 方法二、在PHPUNIT中也可以直接添加该段代码。 且完全可以将for循环代码这一段替换成: $this->waitForAlertPresent();这样单独的一句。 完全可以只写这一句,也可以达到检查这个元素的效果。 ***注意: 参数为空 解释waitForAlertPresent用法: waitForAlertPresent()等待警告/提示出现。 注意,参数为空 如何在自动化测试中生成代码覆盖报告? 解决方法: 在PHPUNIT测代码中加入如下两个语句: protected$coverageScriptUrl=' 和$this->open("/phpunit_coverage.php? PHPUNIT_SELENIUM_TEST_ID=yz"); 将代码加哪到呢? 如下例子: 如我录制好代码,转换成phpunit代码。 命名为liangle-ccov.php 现在我们为liangle-ccov.php添加完测试代码之后为: php classExampleextendsPHPUnit_Extensions_SeleniumTestCase { protected$coverageScriptUrl=' //加入第一句,下面会详细解释。 protectedfunctionsetUp() { $this->setHost("192.168.8.24"); $this->setPort(4445); $this->setBrowser("*firefox"); $this->setBr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Selenium IDE工具总结 IDE 工具 总结