Tocreateahappylifestyleenjoyedbyallpeoplethroughtechnology用科技创造人人乐享的生活方式目录一、selenium基本介绍二、seleniumwebdriver三、练习Selenium是一个用于Web应用程序测试的工具,支持多平台、多浏览器、多语言去实现自动化测试,Selenium2将浏览器原生的API封装成WebDriverAPI,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。selenium特点•主要特点是开源性、跨平台性以及支持众多的编程语言•平台:windows、linux•浏览器:IE、MozillaFirefox、Chrome、Safari等•语言:python、java、php、ruby、C#等架构介绍环境准备\\MIAOLIYUN-480\software•安装jdk1.6•Firefox23.0•Firebug、FirePath•IDE(Eclipse、MyEclipse、IDEA等)•语言:java、python等不限•基本编程能力、css、html等自行学习。SeleniumWebDriver--对浏览器的简单操作•1、打开一个浏览器WebDriverdiver=newFirefoxDriver();//初始化一个火狐浏览器•2.打开一个具体的urlStringurl=定义一个变量,并赋值driver.get(url);driver.navigate().to(url);•3.浏览器导航driver.navigate().back();//向前driver.navigate().forward();//向后driver.navigate().refresh();//当前页刷新driver.manage().window().maximize();//浏览器窗口最大化•4.关闭浏览器driver.close();//关闭当前页面driver.quit();//关闭由selenium所启动的所有页面•5.返回当前页面的Url和TitleStringtitle=driver.getTitle();//返回当前页面的TtileStringcurrentUrl=driver.getCurrentUrl();//返回当前页面的url•6.其他常见方法getWindowHandle()//返回当前的浏览器的窗口句柄getWindowHandles()//返回当前的浏览器的所有窗口句柄getPageSource()//返回当前页面的源码•单个对象定位方法--driver.findElement•多个对象定位方法---driver.findElements•层级定位--xpathSeleniumWebDriver—页面元素定位单个对象定位方法By.id(id)//对于元素的属性包含id的情况适用,推荐使用By.name(name)//对于元素的属性包含name的情况适用By.className(className))//对于元素的属性包含class的情况适用By.cssSelector(selector)//通用定位方式,对于不好定位的元素适用By.linkText(linkText)//适用于链接类的元素,即a标签,包含herf属性的元素By.partialLinkText(linkText)//适用于链接类的元素,模糊匹配,即包含herf属性的元素By.tagName(name)//通用定位方式By.xpath(xpathExpression)//通用定位方式,对于不好定位的元素适用,兼容性存在问题cssSelector这种元素定位方式跟xpath比较类似,但执行速度较快,而且各种浏览器对它的支持都相当到位,所以功能也是蛮强大的。下面是一些常见的cssSelector的定位方式:定位id为flrs的div元素,可以写成:#flrs注:相当于xpath语法的//div[@id=’flrs’]定位id为flrs下的a元素,可以写成#flrsa注:相当于xpath语法的//div[@id=’flrs’]/a定位id为flrs下的href属性值为/forexample/about.html的元素,可以写成:#flrsa[href=”/forexample/about.html”]如果需要指定多个属性值时,可以逐一加在后面,如#flrsinput[name=”username”][type=”text”]。多个对象定位方法findElements()方法可以返回一个符合条件的元素List组/***这是一个定位多个元素并从中选择一个成员进行操作的例子*@paramdriver*@paramindex*/publicvoidhitUpdatePersonnel(WebDriverdriver,intindex){ListWebElementelements=driver.findElements(By.name(record:_flag));//定义了一个集合,将name一样的元素一次性定位出来elements.get(index).click();//通过集合的下标进行操作,集合的第一位下标是0,参数index就是下标层级定位层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。比较典型的应用是表格的定位。//得到table元素对象WebElementtable=driver.findElement(by);//得到table表中所有行对象,并得到所要查询的行对象。ListWebElementrows=table.findElements(By.tagName(tr));//读取下拉列表中选项的个数WebElementa=driver.findElement(By.id(areaID));//定位下拉列表ListWebElementaa=a.findElements(By.tagName(option));//从下拉列表中查找所有的选项System.out.println(aa:=+aa.size());//打印集合的长度最后再总结一下,各种方式在选择的时候应该怎么选择:1.当页面元素有id属性时,最好尽量用id来定位。但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法。2.xpath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。3.当要定位一组元素相同元素时,可以考虑用tagName或name。4.当有链接需要定位时,可以考虑linkText或partialLinkText方式。•输入框(textfieldortextarea)//找到输入框元素:WebElementelement=driver.findElement(By.id(passwd-id));//将输入框清空:element.clear();//在输入框中输入内容:element.sendKeys(“test”);//获取输入框的文本内容:value不要改,取得就是value属性的值element.getAttribute(value);SeleniumWebDriver—页面元素的操作•下拉选择框(Select)对下拉框进行操作时首先要定位到这个下拉框,new一个Selcet对象,然后对它进行操作//找到下拉选择框的元素:Selectselect=newSelect(driver.findElement(By.id(areaID)));//选择对应的选择项:select.selectByVisibleText(“北京市”);//通过可见文本去选择select.selectByValue(“beijing”);//通过html中的value值去选择select.selectByIndex(1);//通过index(索引从0开始)选择//不选择对应的选择项:select.deselectAll();select.deselectByValue(“替换成实际的值”);select.deselectByVisibleText(“替换成实际的值”);或者获取选择项的值:select.getAllSelectedOptions();//多选列表,list循环可获取到对应的值select.getFirstSelectedOption().getText();//单选列表直接获取值•单选项(RadioButton)单选按钮就当按钮处理理解起来就简单了//找到单选框元素:WebElementr_sex=driver.findElement(By.id(sexID1));//选择某个单选项:r_sex.click();//清空某个单选项:单选按钮组中的成员是怎么点都无法清空的哦r_sex.clear();//判断某个单选项是否已经被选择:r_sex.isSelected();//返回的是Boolean类型•多选项(Checkbox)//多选项的操作和单选的差不多:WebElementcheckbox=driver.findElement(By.id(替换成实际的定位的值));checkbox.click();//点击复选框checkbox.clear();//清除复选框checkbox.isSelected();//判断复选框是否被选中checkbox.isEnabled();//判断复选框是否可用•按钮(Button)//找到按钮元素WebElementsaveButton=driver.findElement(By.id(替换成实际的定位的值));//点击按钮saveButton.click();//判断按钮是否可用saveButton.isEnabled();•弹出对话框(Popupdialogs)Alertalert=driver.switchTo().alert();alert.accept();alert.dismiss();alert.getText();•表单(Form)Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交:WebElementapprove=driver.findElement(By.id(approve));approve.submit();//只适合于表单的提交,例如百度搜索框输入关键字后按回车键进行搜索•上传文件(UploadFile)//上传文件的元素操作:WebElementadFileUpload=driver.findElement(By.id(替换成实际的定位的值));//定位上传控件StringfilePath=C:\\test\\uploadfile\\test.jpg;//定义了一个本地文件的路径adFileUpload.sendKeys(filePath);//为上传控件进行赋值操作,将需要上传的文件的路径赋给控•双击(SeleniumAPI)WebElementelement=driver.findElement(By.name(“double”));//定义双击元素(newActions(driver)).doubleClick(element).perform();//双击•拖拉(DragandDrop)不常见的操作WebElementelement=driver.findElement(By.name(source));//定义第一个元素WebElementtarget=driver.findElement(By.name(target));//定义第二个元素(newAct