Selenium经典教程课件_第1页
Selenium经典教程课件_第2页
Selenium经典教程课件_第3页
Selenium经典教程课件_第4页
Selenium经典教程课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

Selenium经典教程selenium教程Selenium经典教程selenium教程12/30/2022Selenium的简介Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、MozillaFirefox、MozillaSuite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。2022/12/3012/27/2022Selenium的简介Selenium是12/30/2022selenium的优势Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium测试可以在Windows、Linux和Macintosh上的InternetExplorer、Mozilla和Firefox中运行。其他测试工具都不能覆盖如此多的平台。使用Selenium和在浏览器中运行测试还有很多其他好处。下面是主要的两大好处:通过编写模仿用户操作的Selenium测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中测试,更容易发现浏览器的不兼容性。Selenium的核心,也称browserbot,是用JavaScript编写的。这使得测试脚本可以在受支持的浏览器中运行。browserbot负责执行从测试脚本接收到的命令,测试脚本要么是用HTML的表布局编写的,要么是使用一种受支持的编程语言编写的。2022/12/3012/27/2022selenium的优势Selenium12/30/2022selenium支持的浏览器2022/12/3012/27/2022selenium支持的浏览器2022/112/30/2022selenium的组件#SeleniumIDE:一个Firefox插件,可以录制用户的基本操作,生成测试用例。随后可以运行这些测试用例在浏览器里回放,可将测试用例转换为其他语言的自动化脚本。#SeleniumRemoteControl(RC):支持多种平台(Windows,Linux,Solaris)和多种浏览器(IE,Firefox,Opera,Safari),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写测试用例。#SeleniumGrid:允许Selenium-RC针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。2022/12/3012/27/2022selenium的组件#Seleniu12/30/2022selenium1VSselenium2Selenium1.0不能处理一下事件:1)本机键盘和鼠标事件2)同源策略XSS/HTTP(S)3)弹出框,对话框(基本身份认证,自签名的证书和文件上传/下载)Selenium2.0有简洁的API,WebDriver和WebElement对象,更好的抽象。且支持多中操作系统,多语言,多浏览器。同时Selenium2.0进行了架构的调整和升级:Selenium2.0=Selenium1.0+WebDriver(也就是说Selenium2.0合并了这两个项目)2022/12/3012/27/2022selenium1VSselenium212/30/2022WebDriver的一个小例子访问it168的一个例子:packagewebdriver;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.firefox.FirefoxDriver;publicclassFirstCase{ publicstaticvoidmain(String[]args)throwsInterruptedException{ WebDriverdriver=newFirefoxDriver(); driver.get(""); Thread.sleep(3000); driver.close(); }}2022/12/3012/27/2022WebDriver的一个小例子访问it112/30/2022定位元素WebDriver可以通过WebDriver实例来定位元素,任何语言库都含有“FindElement”和“FindElements”的方法。第一个方法返回一个WebElement或者抛出异常。后者返回所有WebElement的列表,或者空列表。获取和定位元素我们调用“By”方法。下面具体解释下“By”方法:ByID这是一个极为有效定位元素的方法。普遍的现状是UI工程师在实际编写页面时很少写id或者自动生产一个ID,这些都是需要避免的。对于一个页面Element来说,class比自动生产的id更好。通过id定位元素的例子:<divid="coolestWidgetEvah">...</div>WebElementelement=driver.findElement(By.id("coolestWidgetEvah"));2022/12/3012/27/2022定位元素WebDriver可以通过Web12/30/2022定位元素ByClassName这里的class指的是DOM中的元素,在实际使用过程中,我们也会发现很多DOM元素含有相同的class名。通过classname定位元素例子:<divclass="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>List<WebElement>cheeses=driver.findElements(By.className("cheese"));2022/12/3012/27/2022定位元素ByClassName2012/30/2022元素定位ByTagNameDOM的Tag元素用Tagname定位元素的例子:<iframesrc="..."></iframe>WebElementframe=driver.findElement(By.tagName("iframe"));2022/12/3012/27/2022元素定位ByTagName2022/12/30/2022元素定位ByName例子:<inputname="cheese"type="text"/>WebElementcheese=driver.findElement(B("cheese"));ByLinkText例子:<ahref="/search?q=cheese">cheese</a>WebElementcheese=driver.findElement(By.linkText("cheese"));2022/12/3012/27/2022元素定位ByName2022/12/212/30/2022元素定位ByCSS从名字上看,这是根据CSS来定位元素。例子:<divid="food"><spanclass="dairy">milk</span><spanclass="dairyaged">cheese</span></div>WebElementcheese=driver.findElement(By.cssSelector("#foodspan.dairyaged"));2022/12/3012/27/2022元素定位ByCSS2022/12/2712/30/2022元素定位ByXPATH在高级的水平下,WebDriver尽可能使用浏览器的原生的XPath能力。在那些没有原生的XPath支持的浏览器,我们提供自己的实现方式。但是三个Driver有一定的区别。<inputtype="text"name="example"/><INPUTtype="text"name="other"/>List<WebElement>inputs=driver.findElements(By.xpath("//input"));2022/12/3012/27/2022元素定位ByXPATH2022/12/12/30/2022元素定位使用javascript您可以执行任意JavaScript找到一个元素,只要你返回一个DOM元素,它会自动转换到一个WebElement对象。例子:jQuery的页面加载一个简单的例子:WebElementelement=(WebElement)((JavascriptExecutor)driver).executeScript("return$('.cheese')[0]");寻求所有的页面上的input元素:List<WebElement>labels=driver.findElements(By.tagName("label"));List<WebElement>inputs=(List<WebElement>)((JavascriptExecutor)driver).executeScript("varlabels=arguments[0],inputs=[];for(vari=0;i<labels.length;i++){"+"inputs.push(document.getElementById(labels[i].getAttribute('for')));}returninputs;",labels);2022/12/3012/27/2022元素定位使用javascript202212/30/2022select标签操作遍历select标签WebElementselect=driver.findElement(By.tagName("select"));List<WebElement>allOptions=select.findElements(By.tagName("option"));for(WebElementoption:allOptions){System.out.println(String.format("Valueis:%s",option.getAttribute("value")));option.click();}选择某一个选项:Selectselect=newSelect(driver.findElement(By.tagName("select")));select.deselectAll();select.selectByVisibleText("Edam");2022/12/3012/27/2022select标签操作遍历select标签12/30/2022上传文件WebElementFileUpload=driver.findElement(By.id("upload"));StringfilePath="C:\test\\uploadfile\\media_ads\\test.jpg";FileUpload.sendKeys(filePath);2022/12/3012/27/2022上传文件WebElementFileU12/30/2022提交Submit在form中driver.findElement(By.id("submit")).click();submit不在form中WebElement.submit();建议使用第一种方式,出错的几率比较小,并且比较直观2022/12/3012/27/2022提交Submit在form中2022/12/30/2022拖拽操作WebElementelement=driver.findElement(B("source"));WebElementtarget=driver.findElement(B("target"));(newActions(driver)).dragAndDrop(element,target).perform();2022/12/3012/27/2022拖拽操作WebElementeleme12/30/2022window和frame的切换Windows和Frames之间的切换一些web应用程序有许多Frames或多个Windows。WebDriver支持使用“switchTo”的方法实现的窗口之间切换。driver.switchTo().window("windowName");所有对driver的调用都会指向特定的窗口,但是我们怎么知道窗口的名字呢?我们可以查看javascript代码和打开他的链接:<ahref="somewhere.html"target="windowName">Clickheretoopenanewwindow</a>另外,还可以通过“windowhandle”去调用“switchTo().window()”,通过这个,我们就遍历来找到所有打开的窗口:for(Stringhandle:driver.getWindowHandles()){driver.switchTo().window(handle);}2022/12/3012/27/2022window和frame的切换Windo12/30/2022frame和window的切换Switch同样支持frame:driver.switchTo().frame("frameName");同样可以使用他访问subframe,找frameName的第一个subframe中叫做child的frame:driver.switchTo().frame("frameName.0.child");2022/12/3012/27/2022frame和window的切换Switc12/30/2022弹出框从selenium2.0开始,已经支持对弹出框的获取Alertalert=driver.switchTo().alert();这个方法会返回当前被打开打警告框,你可以进行统一,取消,读取提示内容,后则进入到提示,这个同样使用alerts,confirms,prompts。2022/12/3012/27/2022弹出框从selenium2.0开始,已经12/30/2022一些浏览器的自身操作Navigation:HistoryandLocation之前我们就可以通过get方法来打开一个网页,像我们所看到的,WebDriver同样还有许多小接口,Navigation就是其中一个小接口:driver.navigate().to("");navigate().to和get()其实作用是一样的,但是navigate还可以进行浏览器的前进后退操作:driver.navigate().forward();driver.navigate().back();2022/12/3012/27/2022一些浏览器的自身操作NavigationWebdriver鼠标动作的操作在前面的例子中已经出现过鼠标的操作了,就是拖拽,但是鼠标动作有很多,比如双击,单击右键等。操作类在API中是Actions的类,具体的实现见例子:WedDriverdriver=newFirefoxDriver();Actionsaction=newActions(driver);这个时候可以调用action来进行各种操作。Action.doubleClick();//双击左键具体的例子可以参考selenium的API12/30/20222022/12/30Webdriver鼠标动作的操作在前面的例子中已经出现过鼠标WebDriver中调用javascript有一些在页面的东西可能运用webdriver的API不好解决,这个时候我们可以调用javascript来解析DOM。所有的webdriver的实现类都继承了JavascriptExecutor的接口。下面一个运行javascript的例子:WebDriverdriver=newFirefoxDriver();Stringjs=“alert('Hello')”;(javascriptExecutor)driver.executeScript(js);这个例子就会执行alert。因为针对前端,jquery比较流行,所以我们希望能够使用jquery,下面介绍一下使用jquery的例子。12/30/20222022/12/30WebDriver中调用javascript有一些在页面的东WebDriver中使用jquery假如设定jquery包的路径为path,则程序如下:Stringjquery=null;FileInputStreaminput=newFileInputStream(newFile(path));While((context=input.readlines())!=null){Jquery=jquery+context;}FirefoxDriverdriver=newFirefoxDriver();Stringjs=“”//此处输入你要查找的jquery的代码//这种方式其实就是读取jquery库的内容,然后全部加载执行Driver.executeScript(jquery+js);12/30/20222022/12/30WebDriver中使用jquery假如设定jquery包的WebDriver的设计模式针对小型的页面来做自动化的话,可以很简单的去编写测试用例,但是当涉及的页面比较多的话就会有很多的代码要写,如果找个一元素无限制的被复用,对于程序员来讲是一件很恼火的事情,所以在编写测试脚本的时候我们一般会借助一些设计模式。Webdriver自身带有一个pageobject的模式,下面看一个163发邮件的例子,可以算是一个比较简单的pageObject的例子。12/30/20222022/12/30WebDriver的设计模式针对小型的页面来做自动化的话,可WebDriver的实例1:12/30/20222022/12/30WebDriver的实例1:12/27/20222022/1WebDriver实例1:12/30/20222022/12/30WebDriver实例1:12/27/20222022/12WebDriver实例1:12/30/20222022/12/30WebDriver实例1:12/27/20222022/12WebDriver基于IT168的例子12/30/20222022/12/30WebDriver基于IT168的例子12/27/20222WebDriver实例2:12/30/20222022/12/30WebDriver实例2:12/27/20222022/12Selenium经典教程selenium教程Selenium经典教程selenium教程12/30/2022Selenium的简介Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、MozillaFirefox、MozillaSuite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。2022/12/3012/27/2022Selenium的简介Selenium是12/30/2022selenium的优势Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium测试可以在Windows、Linux和Macintosh上的InternetExplorer、Mozilla和Firefox中运行。其他测试工具都不能覆盖如此多的平台。使用Selenium和在浏览器中运行测试还有很多其他好处。下面是主要的两大好处:通过编写模仿用户操作的Selenium测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中测试,更容易发现浏览器的不兼容性。Selenium的核心,也称browserbot,是用JavaScript编写的。这使得测试脚本可以在受支持的浏览器中运行。browserbot负责执行从测试脚本接收到的命令,测试脚本要么是用HTML的表布局编写的,要么是使用一种受支持的编程语言编写的。2022/12/3012/27/2022selenium的优势Selenium12/30/2022selenium支持的浏览器2022/12/3012/27/2022selenium支持的浏览器2022/112/30/2022selenium的组件#SeleniumIDE:一个Firefox插件,可以录制用户的基本操作,生成测试用例。随后可以运行这些测试用例在浏览器里回放,可将测试用例转换为其他语言的自动化脚本。#SeleniumRemoteControl(RC):支持多种平台(Windows,Linux,Solaris)和多种浏览器(IE,Firefox,Opera,Safari),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写测试用例。#SeleniumGrid:允许Selenium-RC针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。2022/12/3012/27/2022selenium的组件#Seleniu12/30/2022selenium1VSselenium2Selenium1.0不能处理一下事件:1)本机键盘和鼠标事件2)同源策略XSS/HTTP(S)3)弹出框,对话框(基本身份认证,自签名的证书和文件上传/下载)Selenium2.0有简洁的API,WebDriver和WebElement对象,更好的抽象。且支持多中操作系统,多语言,多浏览器。同时Selenium2.0进行了架构的调整和升级:Selenium2.0=Selenium1.0+WebDriver(也就是说Selenium2.0合并了这两个项目)2022/12/3012/27/2022selenium1VSselenium212/30/2022WebDriver的一个小例子访问it168的一个例子:packagewebdriver;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.firefox.FirefoxDriver;publicclassFirstCase{ publicstaticvoidmain(String[]args)throwsInterruptedException{ WebDriverdriver=newFirefoxDriver(); driver.get(""); Thread.sleep(3000); driver.close(); }}2022/12/3012/27/2022WebDriver的一个小例子访问it112/30/2022定位元素WebDriver可以通过WebDriver实例来定位元素,任何语言库都含有“FindElement”和“FindElements”的方法。第一个方法返回一个WebElement或者抛出异常。后者返回所有WebElement的列表,或者空列表。获取和定位元素我们调用“By”方法。下面具体解释下“By”方法:ByID这是一个极为有效定位元素的方法。普遍的现状是UI工程师在实际编写页面时很少写id或者自动生产一个ID,这些都是需要避免的。对于一个页面Element来说,class比自动生产的id更好。通过id定位元素的例子:<divid="coolestWidgetEvah">...</div>WebElementelement=driver.findElement(By.id("coolestWidgetEvah"));2022/12/3012/27/2022定位元素WebDriver可以通过Web12/30/2022定位元素ByClassName这里的class指的是DOM中的元素,在实际使用过程中,我们也会发现很多DOM元素含有相同的class名。通过classname定位元素例子:<divclass="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>List<WebElement>cheeses=driver.findElements(By.className("cheese"));2022/12/3012/27/2022定位元素ByClassName2012/30/2022元素定位ByTagNameDOM的Tag元素用Tagname定位元素的例子:<iframesrc="..."></iframe>WebElementframe=driver.findElement(By.tagName("iframe"));2022/12/3012/27/2022元素定位ByTagName2022/12/30/2022元素定位ByName例子:<inputname="cheese"type="text"/>WebElementcheese=driver.findElement(B("cheese"));ByLinkText例子:<ahref="/search?q=cheese">cheese</a>WebElementcheese=driver.findElement(By.linkText("cheese"));2022/12/3012/27/2022元素定位ByName2022/12/212/30/2022元素定位ByCSS从名字上看,这是根据CSS来定位元素。例子:<divid="food"><spanclass="dairy">milk</span><spanclass="dairyaged">cheese</span></div>WebElementcheese=driver.findElement(By.cssSelector("#foodspan.dairyaged"));2022/12/3012/27/2022元素定位ByCSS2022/12/2712/30/2022元素定位ByXPATH在高级的水平下,WebDriver尽可能使用浏览器的原生的XPath能力。在那些没有原生的XPath支持的浏览器,我们提供自己的实现方式。但是三个Driver有一定的区别。<inputtype="text"name="example"/><INPUTtype="text"name="other"/>List<WebElement>inputs=driver.findElements(By.xpath("//input"));2022/12/3012/27/2022元素定位ByXPATH2022/12/12/30/2022元素定位使用javascript您可以执行任意JavaScript找到一个元素,只要你返回一个DOM元素,它会自动转换到一个WebElement对象。例子:jQuery的页面加载一个简单的例子:WebElementelement=(WebElement)((JavascriptExecutor)driver).executeScript("return$('.cheese')[0]");寻求所有的页面上的input元素:List<WebElement>labels=driver.findElements(By.tagName("label"));List<WebElement>inputs=(List<WebElement>)((JavascriptExecutor)driver).executeScript("varlabels=arguments[0],inputs=[];for(vari=0;i<labels.length;i++){"+"inputs.push(document.getElementById(labels[i].getAttribute('for')));}returninputs;",labels);2022/12/3012/27/2022元素定位使用javascript202212/30/2022select标签操作遍历select标签WebElementselect=driver.findElement(By.tagName("select"));List<WebElement>allOptions=select.findElements(By.tagName("option"));for(WebElementoption:allOptions){System.out.println(String.format("Valueis:%s",option.getAttribute("value")));option.click();}选择某一个选项:Selectselect=newSelect(driver.findElement(By.tagName("select")));select.deselectAll();select.selectByVisibleText("Edam");2022/12/3012/27/2022select标签操作遍历select标签12/30/2022上传文件WebElementFileUpload=driver.findElement(By.id("upload"));StringfilePath="C:\test\\uploadfile\\media_ads\\test.jpg";FileUpload.sendKeys(filePath);2022/12/3012/27/2022上传文件WebElementFileU12/30/2022提交Submit在form中driver.findElement(By.id("submit")).click();submit不在form中WebElement.submit();建议使用第一种方式,出错的几率比较小,并且比较直观2022/12/3012/27/2022提交Submit在form中2022/12/30/2022拖拽操作WebElementelement=driver.findElement(B("source"));WebElementtarget=driver.findElement(B("target"));(newActions(driver)).dragAndDrop(element,target).perform();2022/12/3012/27/2022拖拽操作WebElementeleme12/30/2022window和frame的切换Windows和Frames之间的切换一些web应用程序有许多Frames或多个Windows。WebDriver支持使用“switchTo”的方法实现的窗口之间切换。driver.switchTo().window("windowName");所有对driver的调用都会指向特定的窗口,但是我们怎么知道窗口的名字呢?我们可以查看javascript代码和打开他的链接:<ahref="somewhere.html"target="windowName">Clickheretoopenanewwindow</a>另外,还可以通过“windowhandle”去调用“switchTo().window()”,通过这个,我们就遍历来找到所有打开的窗口:for(Stringhandle:driver.getWindowHandles()){driver.switchTo().window(handle);}2022/12/3012/27/2022window和frame的切换Windo12/30/2022frame和window的切换Switch同样支持frame:driver.switchTo().frame("frameName");同样可以使用他访问subframe,找frameName的第一个subframe中叫做child的frame:driver.switchTo().frame("frameName.0.child");2022/12/3012/27/2022frame和window的切换Switc12/30/2022弹出框从selenium2.0开始,已经支持对弹出框的获取Alertalert=driver.switchTo().alert();这个方法会返回当前被打开打警告框,你可以进行统一,取消,读取提示内容,后则进入到提示,这个同样使用alerts,confirms,prompts。2022/12/3012/27/2022弹出框从selenium2.0开始,已经12/30/2022一些浏览器的自身操作Navigation:HistoryandLocation之前我们就可以通过get方法来打开一个网页,像我们所看到的,WebDriver同样还有许多小接口,Navigation就是其中一个小接口:driver.navigate().to("");navigate().to和get()其实作用是一样的,但是navigate还可以进行浏览器的前进后退操作:driver.navigate().forward();driver.navigate().back();2022/12/3012/27/2022一些浏览器的自身操作NavigationWebdriver鼠标动作的操作在前面的例子中已经出现过鼠标的操

温馨提示

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

评论

0/150

提交评论