培训手册第2讲_第1页
培训手册第2讲_第2页
培训手册第2讲_第3页
培训手册第2讲_第4页
培训手册第2讲_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Google SeleniumSeleniumSelenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,包括Selenium-IDE、Selenium-RC、Selenium-Webdriver以及Selenium-Grid。在本自动化测试框架中我们可以灵活组合应用到其中的Selenium-IDE、Selenium-Webdriver。SeleniumCore:支持DHTML的测试案例(效果类似数据驱动测试)SeleniumIDE和SeleniumRC的引擎。SeleniumIDE:FireFox的一个插件,支持脚本录制。SeleniumRC:SeleniumRemoteControl。Selenium的1.x版本SeleniumWD:SeleniumWebDriver。后续内容主要针对SeleniumWebDriver进行介绍SeleniumGrid:允许同时并行地、在不同的环境上运行多个测试任务,极大地加快Web应用的功能测试。(本文档暂不对此组件进行介绍)Selenium2.0的主要新功能是集成了Webdriver的API。Webdriver的设计提供一个更简单、更简洁的编程接口以及解决的Selenium-RCAPI中的一些限制。Selenium-Webdriver的开发是为了更好地支持动态网页的页面元素可能已经更改,但本身不被重新加载的页面。Webdriver的目标是提供一个设计良好的面向对象的API、提供更好的支持,为Web应用程序测试问题。WD:SeleniumSATF:TestNg使用介绍:/doc/documentation-SeleniumWebDriverWDWebDriverdiver=newFirefoxDriver();//初始化一个火狐浏览器WebDriverie_drivernewInternetExplorerDriver(初始化一个IE浏览器FilepathToFirefoxBinary=newFile("D:\\ProgramFiles\\MozillaFirefox\\firefox.exe");FirefoxBinaryfirefoxbin=newFirefoxBinary(pathToFirefoxBinary);driver=newFirefoxProfileprofile=newFirefoxProfile(newdriver=newFirefoxDriver(profile);打开⼀个具体的driver.navigate().forward();//向后Url和=;// 是在org.openqa.selenium.remote.RemoteWebDriver这个类中实现的,然后不同浏览的driver类继承WDSelenium-Webdriver提供了强大的元素定位方法,单个对象的定位方法多个对象的定位方法层级定位在定位单个元素时,selenium-webdriver提示了如下一些方法对元素进行定位。下面这些定位方式中,优先使用id、name、classname,对于网上的链接元素,推荐使用linkText定位方式,对于不好定位的元素,考虑使用火狐的插件去辅助定位(xpath)。By.id(id对于元素的属性包含id的情况适用,推荐使用B(name)//对于元素的属性包含name的情况适用)//By.tagName(name)//通用定位方式,适用于层级定位注意:selenium-webdriver通过findElement()、findElements()等find方法调用"By"对象来定位和查询元素。By类只是提供查询的方式进行分类。findElement返回一个元素对象否则抛出异常,findElements返回符合条件的元素List,如果不存在符合条件的就返回一个空的list。上述元素的class为bgs_btn,中间有空格的即为复合型class,此时直接按By.className("bgs_btn")则会报错Compoundclassnamesarenotsupported.ConsidersearchingforoneclassnameandfilteringtheresultsoruseCSSselectors.处理方法为只选择class属性中的一个值,下面的代码就不会报错了小技巧(cssSelector使用EfindElements()方法可以返回一个符合条件的元素List*publicvoidhitUpdatePersonnel(WebDriverdriver,int{List<WebElement>elements=层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。比较典型的应用是表格的定位。WebElementtable=List<WebElement>rowstable.findElements(By.tagName("tr"));=System.out.println("aa:="+aa.size());//打印集合的长度输入框(textfieldor对下拉框进行操作时首先要定位到这个下拉框,new一个Selcet行操作Selectselect=newselect.selectByVisibleText(“北京市通过可见文本去选择select.selectByIndex(1);//通过index(0开始)选择select.getFirstSelectedOption().getText();//单选列表直接获取值单选项(Radiocheckbox.click();//点击复选框checkbox.clear();//清除复选框checkbox.isEnabled();//判断复选框是否可用=Alertalert=driver.switchTo().alert();Form中的元素的操作和其它的元素操作一样,WebElementapprove=(UploadStringfilePath="C:\\test\\uploadfile\\test.jpg";//定义了一个本地文件的路径拖拉(DragWebElementtargetdriver.findElement(B("target"));,鼠标悬停(MouseActionsbuilder=newActions(driver);driver.switchTo().frame(Intindex);//传入参数为frame的序号,从0开始driver.switchTo().defaultContent();//切换回父级查找元素必须在对应的ifarme中查找,否则是找不到的。Set<String>handles=driver.getWindowHandles();Iterator<String>it=handles.iterator();while(it.hasNext())Stringhandle=continue;//跳出当前循环WebDriverwindow=driver.switchTo().window(handle);("title,url="+window.getTitle()+","+} forinta0;a=9;a Set<String>windowHandlesdriver.getWindowHandles();for(Stringhandler:windowHandles){ //循环2Stringtitle=driver.getTitle();{a=}}}处理对话框 Alertalert=driver.switchTo().alert();Stringtext=alert.getText(); );// Alertconfirm=driver.switchTo().alert();Stringtext1=confirm.getText(); Alertprompt=driver.switchTo().alert();Stringtext2=prompt.getText(); 从以上代码可以看出driver.switchTo().alert();这句可以得到alert\confirm\prompt对话框的对象,然后运用其方法对它进行操作。对话框操作的主要方法有: 得到它的文本值 相当于点击它的"确认" 相当于点击"取消"或者叉掉对话框 输入值,这个alert\confirm不能用,会报错。publicclassTable{privateStringlocator;privateWebDriverdriver;publicTable(WebDriverdr,String{this.driver=dr;}publicStringgetCellText(introw,intStringxpath=locator+"/tr["+row+"]/td["+col+"]";WebElementcell=driver.findElement(By.xpath(xpath));returncell.getText();}}publicclassTable{privateWebDriverpublicTable(WebDriver{this.driver=}@paramrow0@paramcol0publicStringgetCellText(Byby,introw,intcol)WebElementtable=得到table表中所有行对象,并得到所要查询的行对象。List<WebElement>rowstable.findElements(By.tagName("tr"));WebElementtheRow=rows.get(row);//Stringtext=getCell(theRow,col).getText();returntext;}privateWebElementgetCell(WebElementRow,int{List<WebElement>cells;WebElementtarget={cells=Row.findElements(By.tagName("th"));target=cells.get(col);}{cells=Row.findElements(By.tagName("td"));target=cells.get(col);}return}}driver.switchTo().frame("ueditor_0");//定位到富文本输入框所在的frameJavascriptExecutorjs=(JavascriptExecutor)driver; 操作Cookiecookie=newCookie("name","value");Set<Cookie>cookies=driver.manage().getCookies();System.out.println(String.format("Domain->name->value->expiry->path"));for(Cookiec:cookies)System.out.println(String.format("%s->%s->%s->%s->%s",c.getDomain(),c.getName(),c.getValue(),c.getExpiry(),c.getPath()));上面的代码首先在页面中增加了一个cookie,然后遍历页面的所有cookies,他们的主要属性。最后就是三种删除cookie的方法。longstart=while(true){ if(driver.getTitle().indexOf({}if(System.currentTimeMillis()-start>={}}设置全局元素等待超时时间。隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,WebDriver对象实例整个生命周期都起作用。(处理Table对象时,需要将此设置为默认值)WebDriverWaitwaitnewWebDriverWait(driver, wait.until(new{publicWebElementapply(WebDriverd)return}WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间(10秒)。然后调用until方法,其中重写了ExpectedCondition接口中的apply方法,让其返回一个WebElement,即加载完成的元素,然后点击。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到有成功的返回,当然如果超过设定的值还没有成功的返回,将抛出异常。FilescreenShotFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(screenShotFile,newFile("C:/test.png"));截取页面全图,JSJavascriptExecutorjs=(JavascriptExecutor)driver;JavascriptExecutorjs=(JavascriptExecutor)driver;{tryreturntrue;{return}}publicbooleanisElementExsit(WebDriverdriver,By{booleanflag=false;try{WebElementelement=driver.findElement(locator);flag=null!=element;("Element:"+locator.toString()+"isnot}return}两种判断元素是否存在的方法。{tryreturn{return"Textnot}}protectedvoidclickElementContainingText(Byby,text){List<WebElement>elementList=driver.findElements(by);for(WebElemente:elementList){}}}获取元素所指向的protectedStringgetLinkUrlContainingText(Byby,Stringtext){List<WebElement>subscribeButton=driver.findElements(by);Stringurl=null;for(WebElemente:url=e.getAttribute("href");}}return}protectedvoidsendKeys(Byby,value){}actions类,主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作。对于这些操作,使用perform()方法进行执行。actions类可以完成单一的操作,WebElementelement=dr.findElement(By.id("test"));WebElementelement1=dr.findElement(By.id("su"));等同于:WebElementelement=dr.findElement(By.id("test"));WebElementelement1=dr.findElement(By.id("su"));Actionsaction=newActions(driver);参考前面章节的对元素的拖拉,就是一个组合操作//}//publicvoid{getKeyboard().sendKeys(Keys.CONTROL,}publicvoid{}其他方法请参考eractions.Actionsdriver

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论