收藏 分销(赏)

Selenium_RC使用技巧_v1.0.doc

上传人:xrp****65 文档编号:7707605 上传时间:2025-01-13 格式:DOC 页数:14 大小:138.50KB 下载积分:10 金币
下载 相关 举报
Selenium_RC使用技巧_v1.0.doc_第1页
第1页 / 共14页
Selenium_RC使用技巧_v1.0.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
Selenium RC使用技巧 版本:V1.0 日期:2008-8-5 作者:夏辉(xiahui_1@) 14 本文档所有例子,请参照”jspNews”项目。 1、HTML元素定位 描述分为以下五种方式: 1、以ID号定位 selenium.click(“id=idOfThing”); 2、以名称定位 selenium.click(“name=nameOfThing”); 3、以Xpath定位,Xpath是一套标准规范 selenium.click(“xpath=//img[@alt='The image alt text']”); 4、以DOM定位 selenium.click(“dom=document.images[56]” ); 5、以link方式定位 selenium.click(“link=Test Page For Selenium”); 6、以CSS方式定位 selenium.click(“css=span#firstChild”); 2. frameset操作技巧 2.1 获取当前frameset网页 比如当前网页(index.html)是frameset网页,frameset布局如下: index=1 name= leftFrame index=0 name= topFrame index=2 name= rightFrame 当显示index.html时,可以通过下列语句判断是否是index.html网页: this.sel.open("http://localhost:8080/jspNews"); org.junit.Assert.assertEquals("testone", this.sel.getTitle()); 具体参见:IndexTest.java -> testIndexPageExist() 2.2 获取当前frameset中子网页 用户可以通过当前frameset网页获取其中的子网页,代码如下: this.sel.selectFrame("index=1"); 或者 this.sel.selectFrame("leftFrame "); 例如:查看用户是否已登录 leftFrame首先显示的是登录网页(login.jsp),如果用户输入正确的用户名和密码,则leftFrame显示该用户的功能操作网页(left.html)。 //首先显示index.html网页 this.sel.open("http://localhost:8080/jspNews"); //输入用户名和密码 sel.type("name=name", "admin"); sel.type("name=pwd", "123456"); //模拟点击确定按钮 sel.click("name=btnsub"); //最多等待10秒 sel.waitForPageToLoad("10000"); //选择index=1的子网页,即frameset=leftFrame区的网页 this.sel.selectFrame("index=1"); //判断该网页的标题是否是leftwindow org.junit.Assert.assertEquals("leftwindow",this.sel.getTitle()); 具体参见:IndexTest.java -> testLoginSuccess () 2.3 从framework中的子网页跳到主网页 如果用户使用了 this.sel.selectFrame("index=1"); 从默认的主网页跳转到了子网页,那么可以通过下列语句返回到主网页。 this.sel.selectFrame("relative=parent"); 3. html文本框操作技巧 3.1 模拟输入文本,并判定 //对文本框赋值 this.sel.type("name=Tname","夏天"); //将文本框的值赋给textValue String textValue=this.sel.getValue("name=Tname"); org.junit.Assert.assertEquals( "夏天", textValue); 具体参见:formExampleTest.java -> testtextFrame () 4. html下拉列表框操作技巧 4.1 判断下拉框的所有数据项是否和期望相同 首先建立期望的数据项,如下所示: String[] expectProfessions=new String[3]; expectProfessions[0]="计算机"; expectProfessions[1]="文学"; expectProfessions[2]="数学"; 再从当前网页的下拉框中读取所有的数据项: String[] actualProfessions=this.sel.getSelectOptions("profession"); 利用junit4 独有的数组判定函数进行比较 org.junit.Assert.assertArrayEquals("下拉框出错", expectProfessions, actualProfessions); 具体参见:formExampleTest.java -> testSelectFrame () 4.2模拟用户选择一个数据项,并判定 首先模拟用户选择一个数据项,如下所示: //将名为profession的下拉框,选择第一个数据项 this.sel.select("name=profession", "index=1"); 1、网页不提交,判定模拟选择的数据项的名字 String selectName=sel.getSelectedLabel("name=profession"); org.junit.Assert.assertEquals("文学", selectName); 2、网页不提交,判定模拟选择的数据项的值 String selectName=sel.getSelectedValue("name=profession"); org.junit.Assert.assertEquals("文学", selectName); 3、网页提交后,判定模拟选择的数据项的值 this.sel.click("btnSub"); this.sel.waitForPageToLoad("5000"); org.junit.Assert.assertTrue("下拉框没有选择 文学", this.sel.isTextPresent("文学-2")); 具体参见:formExampleTest.java -> testSelectFrame () 5. html复选框操作技巧 5.1 模拟选中一个复选框,并判定 首先模拟用户选中复选框,并判定 //模拟用户选中数据项-体育 this.sel.check("name=Tch1"); //判定是否选中 boolean selected=this.sel.isChecked("name=Tch1"); org.junit.Assert.assertEquals(true, selected); 具体参见:formExampleTest.java -> testCheckbox() 5.2 模拟取消选中一个复选框,并判定 首先模拟用户选中复选框,再模拟取消选中,并判定 //模拟用户选中数据项-体育 this.sel.check("name=Tch1"); //模拟用户取消选中数据项-体育 this.sel.uncheck("name=Tch1"); //判定是否选中 boolean selected=this.sel.isChecked("name=Tch1"); org.junit.Assert.assertEquals(false, selected); 具体参见:formExampleTest.java -> testCheckbox() 6. html列表框操作技巧 6.1判断列表框的所有数据项是否和期望相同 首先建立期望的数据项,如下所示: String[] expectSports=new String[3]; expectSports[0]="羽毛球"; expectSports[1]="乒乓球"; expectSports[2]="篮球"; 再从当前网页的列表框中读取所有的数据项: String[] actualSports=this.sel.getSelectOptions("sport"); 利用junit4 独有的数组判定函数进行比较 org.junit.Assert.assertArrayEquals("下拉框出错", expectProfessions, actualProfessions); 注意: expectSports数组中元素的顺序必须和网页上的顺序一致,否则出错 具体参见:formExampleTest.java -> testListFrame () 6.2判断列表框是否有数据被选中 //判断列表框是否有数据被选中org.junit.Assert.assertFalse(this.sel.isSomethingSelected("name=sport")); 6.3模拟用户选择多个数据项,并判定 模拟用户选择数据项有二种方式: this.sel.addSelection("name=sport", "index=0"); this.sel.addSelection("name=sport", "label=乒乓球"); 建立期望的数据项,如下所示: String[] expectSports=new String[2]; expectSports[0]="羽毛球"; expectSports[1]="乒乓球"; 判定期望结果与实际结果是否一致,有二种方式: 第一种方式 //读取选中的数据项 String[] selectValues = this.sel.getSelectedLabels("name=sport"); org.junit.Assert.assertArrayEquals("列表框出错", expectSports,selectValues); 第二种方式 //期望结果初始化 String[] expectSports=new String[2]; expectSports[0]="1"; expectSports[1]="2"; //读取选中的数据项 String[] selectValues = this.sel.getSelectedValues("name=sport"); org.junit.Assert.assertArrayEquals("列表框出错",expectSports, selectValues); 7. html单选按钮操作技巧 7.1判定是否有单选按钮被选中 //判定是否有单选项选中-第一种方法 boolean selected=this.sel.isChecked("name=Tsex"); org.junit.Assert.assertEquals(true, selected); //判定是否有单选项选中-第二种方法 String selectedValue =this.sel.getValue("name=Tsex"); org.junit.Assert.assertEquals("on", selectedValue); 具体参见:formExampleTest.java -> testRadio() 7.2 模拟用户选中一个数据项,并判定 首先模拟用户选中一个单选按钮,并判定 //模拟用户选中单选项-女,并判定 this.sel.check("name=Tsex value=女"); boolean selected=this.sel.isChecked("name=Tsex value=女"); org.junit.Assert.assertEquals(true, selected); 具体参见:formExampleTest.java -> testRadio() 8. 验证技巧 8.1判断页面是否存在一个元素 只需打开网页,利用下列语句进行判定,比如验证文本框是否存在 /验证文本框--姓名 是否存在 org.junit.Assert.assertTrue(this.sel.isElementPresent("name=Tname")); 具体参见:formExampleTest.java -> testIsExist() 8.2 处理js的Alert提示 例:比如有一个文本框用来输入年龄,现通过javascript的onBlur事件来检查输入的数据是否是数字,如果不是,用alert,显示“请输入数字内容”。 1、利用focus()确定当前网页焦点,输入数据 //找到文本框--年龄,此语句必不可少 this.sel.focus("name=age"); // 对文本框赋值 this.sel.type("name=age", "汉字233"); 2、将焦点转移 //将焦点跳转到文本框--姓名时,利用onblue事件自动检查年龄 this.sel.focus("name=Tname"); 3、验证是否出现alert,如果出现,抓住后处理 if(this.sel.isAlertPresent()){ org.junit.Assert.assertEquals("请输入数字内容", this.sel.getAlert()); } else org.junit.Assert.fail(); 具体参见:formExampleTest.java -> testAlert() newWindowTest.java -> testAlert() 注意: getAlert()作用是返回警告窗口内的警告内容,并且模拟用户点击”确定”。 Alert函数只能处理一次,即不能出现两次getAlert,否则第二次调用getAlert失败 8.3 处理js的confirm提示 当selenium处理js的confirm()时,默认自动模拟选择”确定”按钮,如果用户想自动模拟选择”取消”按钮,可使用chooseCancelOnNextConfirmation //如果不使用chooseCancelOnNextConfirmation语句,模拟用户点击"确定",否则模拟用户点击"取消" //this.sel.chooseCancelOnNextConfirmation(); this.sel.focus("name=btnsm2"); this.sel.click("name=btnsm2"); // 由于点击"取消",窗体弹出一个alert,所以这里进行判断 if (!this.sel.isAlertPresent()) { org.junit.Assert.assertEquals("表单例子",this.sel.getTitle()); } else { org.junit.Assert .assertEquals("你按了取消,那就是返回false", this.sel.getAlert()); } 具体参见:newWindowTest.java -> testConfirm() 8.4 处理js的prompt提示 如果js中包含prompt(),则可使用answerOnNextPrompt模拟用户输入 this.sel.open("http://localhost:8080/jspNews/NewWindow.html"); //使用answerOnNextPrompt模拟用户输入 this.sel.answerOnNextPrompt("北京"); this.sel.focus("name=btnsm3"); this.sel.click("name=btnsm3"); // 自动模拟点击"确定",窗体弹出一个alert,所以这里进行判断 if (this.sel.isAlertPresent()) { org.junit.Assert.assertEquals("欢迎您:北京",this.sel.getAlert()); } else { org.junit.Assert.fail(); } 具体参见:newWindowTest.java -> testPromt() 8.5 验证html元素的属性 我们可以通过ID号、name或数组方式获取html元素的属性 // 验证属性|id1@class|a1 org.junit.Assert.assertEquals("a1", this.sel.getAttribute("id1@class")); // 验证属性|name1@class|a2 org.junit.Assert.assertEquals("a2",this.sel.getAttribute("name1@class")); // 以数组方式验证属性|document.links[1]@class|a2 org.junit.Assert.assertEquals("a2",this.sel.getAttribute("document.links[1]@class")); 具体参见:AttributeTest.java -> testAttribute () 9. 弹出窗体 9.1判断是否存在弹出窗体 模拟用户单击button按钮,触发js <script type="text/javascript"> function openWindow() { var refmyPopWindow=window.open('./test_select_window_popup.html', 'myPopupWindowTitle', 'height=200,width=500,top=400,left=50'); } </script> <button id="popupPage" onclick="openWindow();">弹出一个窗体</button> JS中的open函数: 第一个参数:网址 第二个参数:新网页的名称 第三个参数:网页的状态,比如大小,界面等 返回值:新窗体的引用 测试是否弹出窗体代码如下: this.sel.open("http://localhost:8080/jspNews/test_select_window.html"); // 点击按钮,用js的window.open弹出一个窗体 this.sel.click("popupPage"); // 等待5秒,弹出名为myPopupWindow的窗体 this.sel.waitForPopUp("myPopupWindowTitle", "5000"); // 将弹出的窗体设置为当前窗体 this.sel.selectWindow("myPopupWindowTitle"); // this.sel.selectWindow("弹出的窗体"); org.junit.Assert.assertEquals("http://localhost:8080/jspNews/test_select_window_popup.html",this.sel.getLocation()); 说明: selectWindow函数 第一个参数:可以是窗体的名称,比如myPopupWindowTitle;可以是窗体title,比如弹出的窗体; 具体参见:popWindowTest.java -> testIsExistPopWindow () 9.2测试关闭弹出的子窗体,并将子窗体的值传给父窗体 模拟用户单击button按钮,触发js的open(),打开子窗体。 在子窗体的文本框内输入数据,模拟用户点击关闭按钮,将子窗体中文本框的值传给父窗体 this.sel.click("popupPage"); // 等待5秒,弹出名为myPopupWindow的窗体 this.sel.waitForPopUp("myPopupWindowTitle", "5000"); // 将弹出的子窗体设置为当前窗体 this.sel.selectWindow("弹出的窗体"); // 对子窗体文本框赋值 this.sel.type("name=txtchildname", "夏天"); //点击子窗体的关闭按钮 this.sel.click("id=btnClosePage"); //将当前窗体设置为父窗体 this.sel.selectWindow("主窗体"); //从父窗体的文本框读取数据,准备验证 String textValue = this.sel.getValue("name=txtParentName"); org.junit.Assert.assertEquals("夏天", textValue); 具体参见:popWindowTest.java -> testCloseChildPage() 9.3子窗体上加载一个新网页 本例通过超链接方式,在子窗体上重新加载一个新网页,并验证 this.sel.open("http://localhost:8080/jspNews/test_select_window.html"); // 点击按钮,用js的window.open弹出一个窗体 this.sel.click("popupPage"); // 等待5秒,弹出名为myPopupWindow的窗体 this.sel.waitForPopUp("myPopupWindowTitle", "5000"); // 将弹出的窗体设置为当前窗体 this.sel.selectWindow("弹出的窗体"); //通过超链接加载新的网页 this.sel.click("link=加载一个新网页"); this.sel.waitForPageToLoad("30000"); org.junit.Assert.assertEquals("重载窗体",this.sel.getTitle()); 具体参见:popWindowTest.java -> testReloadChildPage () 10. html超链接操作技巧 10.1 点击超链接到新网页 //通过超链接加载新的网页 this.sel.click("link=加载一个新网页"); this.sel.waitForPageToLoad("30000"); 具体参见:JsTest.java -> testJSPage () 10.2 包含JS的超链接 如下所示: <a id="link" href="javascript:alert('link clicked: ' + foo)">link</a> 可通过下列代码测试: // 模拟用户点击超链接 this.sel.click("link"); org.junit.Assert.assertEquals("link clicked: foo", this.sel.getAlert()); 具体参见:JsTest.java -> testJSPage () 10.3包含三个alert()的超链接 如下所示: <a id="linkWithMultipleJavascriptStatements" href="javascript: alert('alert1'); alert('alert2') ; alert ('alert3')">link with multiple javascript calls</a> 利用getAlert()函数,分别进行验证: // 点击带JS的超链接,包含三个alert this.sel.click("linkWithMultipleJavascriptStatements"); org.junit.Assert.assertEquals("alert1", this.sel.getAlert()); org.junit.Assert.assertEquals("alert2", this.sel.getAlert()); org.junit.Assert.assertEquals("alert3", this.sel.getAlert()); 具体参见:JsTest.java -> testJSPage () 10.4多个超链接 如果一个网页上出现了多个超链接元素,一般可通过其ID或name识别,selenium也将多个超链接看成一个数组,例如网页上存在多个超链接 <a id="id1" href="#id1" class="a1">this is the first element</a> <!-- DO NOT DELETE THIS COMMENT: see SEL-68 --> <a id="id2" name="name1" href="#id2" class="a2" alt="foo">this is the&nbsp;<b>second</b> <span selenium:foo="bar">element</span> </a> 我们利用下列代码验证 org.junit.Assert.assertEquals("this is the second element", this.sel.getText("document.links[1]")); 具体参见:AttributeTest.java -> testArrayHtml() 11. 其它操作技巧 11.1 模拟用户点击浏览器上的“后退”按钮 this.sel.goBack(); this.sel.waitForPageToLoad("5000"); 11.2 让网页暂停 pause(1000);//1秒 12 让RC模式支持FIT模式 Selenium FIT mode和RC mode下的命令有些许差异,比如FIT中的assertTextPresent,在RC中变成了isTextPresent。同样还有FIT中最实用的命令clickAndWait,在RC中变成了click和waitForPageToLoad。在RC中使用FIT mode中的命令也非难事,找到com.thoughtworks.selenium.Selenium,添加方法: public void doCommand(String commmand, String parameters); 然后在com.thoughtworks.selenium.DefaultSelenium中添加实现: public void doCommand(String commmand, String parameters) { String[] paras = new String[] { "" , "" , "" } for ( int i = 0 ; i < parameters.length && i < 3 ; i ++ ) paras[i] = parameters[i]; commandProcessor.doCommand(command, paras); 然后试验一下: selenium.doCommand( " clickAndWait " );
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服