《软件测试技术》-第七章_第1页
《软件测试技术》-第七章_第2页
《软件测试技术》-第七章_第3页
《软件测试技术》-第七章_第4页
《软件测试技术》-第七章_第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

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

文档简介

7.1UI自动化测试介绍在学习UI自动化测试之前.需要先了解自动化测试是什么.自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.通常.在设计了测试用例并通过评审之后.由测试人员根据测试用例中描述的规程一步步执行测试.将得到的实际结果与期望结果比较.在此过程中.为了节省人力、时间或硬件资源.提高测试效率.减少人工重复工作.便引入了自动化测试的概念.在自动化测试中.基于人机交互的自动化测试.称为UI自动化(UserInterfaceAutoma ̄tion).下一页返回7.1UI自动化测试介绍7.1.1自动化测试的优势和劣势自动化测试的优势:回归测试更方便可靠.可运行更多、更烦琐的测试.且快速高效.可执行一些手工测试执行相当困难或者做不到的测试.如大量的用户并发.可更好地利用资源.具有一致性和可重复性的特点.自动化测试脚本完全可复用.可提升软件的可信度.可进行多环境下测试等.自动化测试的劣势:永远不可能完全替代手工测试.自动化测试无法做到手工测试的覆盖率.不是每个测试用例都适合做成自动化.如建议一个界面的布局是否正确.上一页下一页返回7.1UI自动化测试介绍手工测试发现的缺陷远比自动化测试多.自动化测试是几乎无法发现新缺陷的.其最大的用途是用来回归.确保曾经的bug没有在新的版本上重新出现.自动化测试工具是死的.它不具备任何想象力.自动化测试的好坏完全取决于测试工程师.自动化测试成本投入高.风险大.对测试人员的技术要求高.对测试工具同样有要求.7.1.2适合自动化测试的项目从投入产出比的角度衡量.只要自动化产出大于投入的产品.都可以考虑进行自动化测试.那么如何计算自动化产出呢?用一个简化的公式可以表达如下:上一页下一页返回7.1UI自动化测试介绍自动化的收益=迭代次数×全手动执行成本-首次自动化成本-维护次数×维护成本从产品维度的角度出发.全部手动执行成本越高.迭代次数越多.则收益越明显.所以体量越大.成熟度越高.更新频率越高.就越适合进行自动化测试.简而言之.项目周期长.系统版本不断.并且需求不会频繁变更.此时是适合引入自动化测试的.上一页下一页返回7.1UI自动化测试介绍7.1.3进行自动化测试需要具备的技能1.建立自动化思维能够发现问题.并辅以自动化方式解决问题.这就是自动化思维.就像学习一门武功.自动化思维就是武林秘籍.而编程语言就是使用的兵器.语言的选择决定了兵器是否好用.而最重要的还是能否了解武林秘籍的精髓.也就是建立自动化思想.2.测试相关的知识储备比如进行Web测试.就需要懂得JS、CSS、HTML、XPath.如果进行移动端测试.就得具备Android开发基础和iOS开发基础.会调试APP.上一页下一页返回7.1UI自动化测试介绍3.掌握一门开发语言学习一种编程语言.Java、Python、Ruby、C#等都可以.4.善于学习.能够知其然且知其所以然IT行业发展太快.每隔一段时间就会出现一些新的东西.原来很火的东西也会逐渐没落.谁都无法预测.上一页返回7.2PC端UI自动化测试这里的PC指的是Windows系统的电脑端.在现有的众多UI自动化工具中.PC端的UI自动化工具无疑是最多的.归纳为测试方案.主要有以下两种:1.录屏回放方式按时间间隔完全记录用户的鼠标和键盘操作.录制完成后可进行回放操作.完全回放用户的操作.该测试方案使用最为简易.基本上无法进行复用.一旦UI发生了变化.或UI出现了卡顿导致UI未加载完毕.后续的操作就无法按照既定目标进行操作.所以录屏回放方式常用于界面固定、业务简单的UI测试.网络上这样的测试工具较多.这里不再赘述.下一页返回7.2PC端UI自动化测试

2.图片识别方式对用户要操作的UI位置进行截图.使用图片识别技术获取截图坐标位置.并将工具或代码编辑的操作在此坐标位置进行播放.例如:用户要在打开“我的电脑”后再打开“D盘”中的“MYTEST.TXT”文件.使用截图识别方式则需要对“我的电脑”“D盘”“MYTEST.TXT”这三个图标进行截图.按顺序设置鼠标移动到图片识别到的位置.进行“双击”操作.图片识别方式相对录屏回放方式更加灵活.不受UI卡顿的影响.可通过图片识别方式确认UI是否加载完毕.再进行下一步操作.图片识别方式还可以事先对操作成功的界面的上一页下一页返回7.2PC端UI自动化测试

关键位置进行截图.从而达到在UI自动化操作完成后确认操作结果是否成功的目的.图片识别方式虽然灵活.但是也有缺点.当产品UI变化频繁的时候.这种测试方案付出的代价就很大.UI有变化的截图都需要重新截取.目前互联网公司使用较多的是Python脚本自动化.其利用Python的图片处理库进行图片识别.配合WIN32API进行键盘和鼠标的操作.在实际工作中.PC端UI自动化还有一种特殊的存在方式.它需要产品接入UI自动化SDK.通过SDK获取产品UI界面中控件的id、名称、坐标位置.再通过WIN32API操控鼠标和键盘实现对产品UI的操作.比较有名的UI自动化SDK是GAutomator上一页返回7.3Web自动化测试WebUI自动化测试开源框架———Selenium2.01.框架初识WebUI自动化自从提出到现在.经过多年的发展.互联网中存在多种多样的自动化框架.比如Selenium、HPQuickTestProfessional、WATIN、SilkTest等.这些框架各有优势.目前多数企业级项目使用的自动化框架为Selenium2.0.之所以选择此框架.主要是此框架有如下特点:(1)Selenium是一套开源框架.支持多种脚本语言.方便对其进行定制开发.下一页返回7.3Web自动化测试

(2)支持原生JS.兼容性强.适用于多数测试场景.(3)SeleniumWebDriver成为W3C标准.得到Chrome、IE、Edge、Opera、Safari、Fire ̄fox等广泛的浏览器厂商支持.可以使用框架进行浏览器适配测试.本书以Selenium2.0为主.而脚本语言则选用Java.上一页下一页返回7.3Web自动化测试

2.环境搭建(1)环境准备.①JavaJDK1.8.②IntelliJIDEA(本书使用的版本为15.0.1).③WebDriver文件.主流浏览器Driver文件下载地址如下:http://chromedriver.storage.googleapis.com/index.html(ChromeDriver).上一页下一页返回7.3Web自动化测试

https://github.com/mozilla/geckodriver/releases(FirefoxDrivier).http://selenium-release.storage.googleapis.com/index.html(IEDriver).(2)安装JDK和IntelliJIDEA.(3)搭建Selenium环境.①启动IntelliJIDEA.如图7-1所示.②新建Maven项目.单击“Next”按钮.如图7-2所示.上一页下一页返回7.3Web自动化测试

③输入Maven项目的GroupId和ArtifactId.单击“Next”按钮.如图7-3所示.④输入工程名称.单击“Finish”按钮.完成项目创建.如图7-4所示.⑤打开Maven配置文件.导入Selenium安装包.在Maven文件中增加如下配置.如图7-5所示.<dependencies><dependency><groupId>org.seleniumhq.selenium</groupId>上一页下一页返回7.3Web自动化测试

<artifactId>selenium-java</artifactId><version>3.4.0</version></dependency></dependencies>⑥单击Maven项目->重新导入按钮.重新导入Maven包.如图7-6所示.⑦复制WebDriver可执行文件至工程根目录下.如图7-7所示.⑧至此.完成配置.上一页下一页返回7.3Web自动化测试

3.WebDriverAPI介绍Selenium2.0的主要特性就是与WebDriverAPI的集成.WebDriver旨在提供一个更简单、更简洁的编程接口以及解决一些Selenium-RCAPI的限制.Selenium-WebDriver更好的支持页面本身不重新加载而页面的元素改变的动态网页.WebDriver的目标是提供一个良好设计的面向对象的API.提供对现代先进Web应用程序测试问题的改进支持.上一页下一页返回7.3Web自动化测试

1)用WebDriver打开一个浏览器常用的浏览器有Firefox和IE两种.Firefox是Selenium支持得比较成熟的浏览器.但是做页面的测试.其速度通常很慢.严重影响持续集成的速度.这个时候建议使用HtmlUnit.不过HtmlUnitDirver运行时是看不到界面的.对于调试来说很不方便.使用哪种浏览器可以做成配置项.应根据需要灵活配置.(1)打开Firefox浏览器:publicstaticvoidmain(String[]args){上一页下一页返回7.3Web自动化测试

WebDriverwebDriver=newFirefoxDriver().}(2)打开IE浏览器:publicstaticvoidmain(String[]args){WebDriverwebDriver=newInternetExplorerDriver().}上一页下一页返回7.3Web自动化测试

(3)打开HtmlUnit浏览器:publicstaticvoidmain(String[]args){WebDriverwebDriver=newChromeDriver().}2)打开测试页面对页面测试.首先要打开被测试页面的地址(如:http://www.baidu.com).WebDriver提供的get方法可以打开一个页面:上一页下一页返回7.3Web自动化测试

publicstaticvoidmain(String[]args){WebDriverwebDriver=newChromeDriver().System.setProperty("webdriver.chrome.driver"."chromedriver.exe").webDriver.get("http://www.baidu.com").//or上一页下一页返回7.3Web自动化测试

webDriver.navigate().to("http://www.baidu.com").webDriver.quit().}至此已经可以实现一个简单的自动化脚本:importorg.openqa.selenium.By.importorg.openqa.selenium.WebDriver.importorg.openqa.selenium.WebElement.上一页下一页返回7.3Web自动化测试

importorg.openqa.selenium.chrome.ChromeDriver.importorg.openqa.selenium.firefox.FirefoxDriver.importorg.openqa.selenium.ie.InternetExplorerDriver.importorg.openqa.selenium.support.ui.ExpectedCondition.importorg.openqa.selenium.support.ui.WebDriverWait.publicstaticvoidexample(){上一页下一页返回7.3Web自动化测试

//CreateanewinstanceoftheFirefoxdriver//Noticethattheremainderofthecodereliesontheinterface//nottheimplementation.WebDriverdriver=newFirefoxDriver().//AndnowusethistovisitGoogledriver.get("http://www.baidu.com").上一页下一页返回7.3Web自动化测试

//Alternativelythesamethingcanbedonelikethis//driver.navigate().to("http://www.google.com").//FindthetextinputelementbyitsnameWebElementelement=driver.findElement(By.name("q")).上一页下一页返回7.3Web自动化测试

//Entersomethingtosearchforelement.sendKeys("Cheese!").//Nowsubmittheform.WebDriverwillfindtheformforusfromtheelementelement.submit().//CheckthetitleofthepageSystem.out.println("Pagetitleis:"+driver.getTitle()).

上一页下一页返回7.3Web自动化测试

//GoogleˈssearchisrendereddynamicallywithJavaScript.//Waitforthepagetoload.timeoutafter10seconds(newWebDriverWait(driver.10)).until(newExpectedCondition<Boolean>(){publicBooleanapply(WebDriverd){returnd.getTitle().toLowerCase().startsWith("cheese!").上一页下一页返回7.3Web自动化测试

}}).//Shouldsee:"cheese!-GoogleSearch"System.out.println("Pagetitleis:"+driver.getTitle()).//Closethebrowserdriver.quit().}上一页下一页返回7.3Web自动化测试

3)基本操作(1)get方法.操作浏览器跳转到指定地址.比如打开http://www.baidu.com.driver.get("http://www.baidu.com").(2)navigate方法.操作浏览器上方的导航功能(前进、后退、刷新、跳转等).上一页下一页返回7.3Web自动化测试

webDriver.navigate().to("http://www.baidu.com").webDriver.navigate().forward().webDriver.navigate().back().webDriver.navigate().refresh().(3)getCurrentUrl方法获取浏览器地址栏中的地址信息.Stringurl=webDriver.getCurrentUrl().上一页下一页返回7.3Web自动化测试

(4)switchTo方法WebDriver进行对象切换.可以切换Iframe、窗体等.webDriver.switchTo().activeElement().//切换至焦点元素webDriver.switchTo().frame().//切换至Iframe元素.webDriver.switchTo().window().//切换至窗体(5)findElements方法上一页下一页返回7.3Web自动化测试

WebDriver根据搜索条件查出所有符合条件的元素.List<WebElement>webElements=webDriver.findElements(By.name("wd")).//通过name获取百度搜索框控件集合(6)findElement方法WebDriver根据搜索条件查出符合条件的第一个元素.WebElementwebElement=webDriver.findElement(By.id("kw")).//通过ID获取百度搜索框控件上一页下一页返回7.3Web自动化测试

(7)By.id方法查找元素时.定位元素的条件方法.通过元素ID获取元素.由于ID在HTML文档中具有唯一性.所以ID定位的方式准确度高.WebElementwebElement=webDriver.findElement(By.id("kw")).//通过ID获取百度搜索框控件上一页下一页返回7.3Web自动化测试

(8)By.name方法查找元素时.定位元素的条件方法.通过元素的name获取元素.由于name在HTML并不是唯一性质.所以在查询时需要注意筛选正确元素.WebElementwebElement=webDriver.findElement(By.name("wd")).//通过name获取百度搜索框控件(9)By.xpath方法查找元素时.定位元素的条件方法.通过元素的xpath获取元素.xpath指向的元素在上一页下一页返回7.3Web自动化测试

HTML中具有唯一性.所以xpath定位方式准确度高WebElementwebElement=webDriver.findElement(By.xpath("//input[@id=ˈkwˈ]")).//通过xpath获取百度搜索框控件上一页下一页返回7.3Web自动化测试

(10)By.className方法查找元素时.定位元素的条件方法.通过元素的className获取元素.className一般指向元素的样式名称.所以通过className获取元素通常可以获取一组样式相同的元素集合.WebElementwebElement=webDriver.findElement(By.className("s_ipt")).//通过className获取百度搜索框控件上一页下一页返回7.3Web自动化测试

(11)By.linkText方法查找元素时.定位元素的条件方法.通过连接的文本信息获取<a/>元素.WebElementwebElement=webDriver.findElement(By.linkText("新闻")).//通过文本获取百度首页上的新闻连接(12)BytageName方法上一页下一页返回7.3Web自动化测试

查找元素时.定位元素的条件方法.通过元素的标签名来获取元素.一般情况下tag ̄Name定位比较麻烦.需要很多前置元素来辅助定位.WebElementwebElement=webDriver.findElement(By.tagName("in ̄put")).//通过输入框的<input>标签定位百度搜索框上一页下一页返回7.3Web自动化测试

(13)sendKeys方法元素的操作方法.对HTML页面上的输入框发送文本信息.WebElementwebElement=webDriver.findElement(By.id("kw")).webElement.sendKeys("软件自动化测试").//在百度输入框中输入文本上一页下一页返回7.3Web自动化测试

(14)clear方法元素的操作方法.对HTML输入框进行内容清除.WebElementwebElement=webDriver.findElement(By.id("kw")).webElement.sendKeys("软件自动化测试").webElement.clear().//清空文本信息上一页下一页返回7.3Web自动化测试

(15)click方法元素的操作方法.模拟用户单击HTML元素.WebElementwebElement=webDriver.findElement(By.id("kw")).webElement.click().//单击百度搜索框上一页下一页返回7.3Web自动化测试

(16)getText方法获取元素的文本信息.WebElementwebElement=webDriver.findElement(By.id("kw")).webElement.sendKeys("软件自动化测试").Stringtext=webElement.getText().//获取输入框中的文本信息上一页下一页返回7.3Web自动化测试

4)特定控件操作(1)下拉选择框(Select).找到下拉选择框的元素:Selectselect=newSelect(webDriver.findElement(By.id("se ̄lect"))).选择对应的选择项:select.selectByVisibleText("mediaAgencyA").上一页下一页返回7.3Web自动化测试

或select.selectByValue("MA_ID_001").不选择对应的选择项:select.deselectAll().select.deselectByValue("MA_ID_001").select.deselectByVisibleText("mediaAgencyA").上一页下一页返回7.3Web自动化测试

或者获取选择项的值:select.getAllSelectedOptions().select.getFirstSelectedOption().(2)单选项(RadioButton).找到单选框元素:WebElementbookMode=driver.findElement(By.id("BookMode")).选择某个单选项:bookMode.click().上一页下一页返回7.3Web自动化测试

清空某个单选项:bookMode.clear().判断某个单选项是否已经被选择:bookMode.isSelected().(3)多选项(CheckBox)多选项的操作和单选项差不多:WebElementcheckbox=driver.findElement(By.id("myCheckbox.")).checkbox.click().上一页下一页返回7.3Web自动化测试

checkbox.clear().checkbox.isSelected().checkbox.isEnabled().(4)按钮(Button).找到按钮元素:WebElementsaveButton=driver.findElement(By.id("save")).上一页下一页返回7.3Web自动化测试

单击按钮:saveButton.click().判断按钮是否enable:saveButton.isEnabled().(5)左、右选择框.左边是可供选择项.选择后移动到右边的框中.反之亦然.例如:Selectlang=newSelect(driver.findElement(By.id("languages"))).lang.selectByVisibleText("English").上一页下一页返回7.3Web自动化测试

WebElementaddLanguage=driver.findElement(By.id("addButton")).addLanguage.click().(6)弹出对话框(PopupDialogs).Alertalert=driver.switchTo().alert().alert.accept().alert.dismiss().alert.getText().上一页下一页返回7.3Web自动化测试

(7)表单(Form).表单中元素的操作和其他元素的操作一样.对元素操作完成后对表单进行提交:WebElementapprove=driver.findElement(By.id("approve")).approve.click().或approve.submit().//只适合表单的提交(8)上传文件(UploadFile).上一页下一页返回7.3Web自动化测试

上传文件的元素操作:WebElementadFileUpload=driver.findElement(By.id("WAP-upload")).StringfilePath="C:\test\\uploadfile\\media_ads\\test.jpg".adFileUpload.sendKeys(filePath).(9)window和frame之间的切换.一般来说.登录后建议:driver.switchTo().defaultContent().上一页下一页返回7.3Web自动化测试

切换到某个frame:driver.switchTo().frame("leftFrame").从一个frame切换到另一个frame:driver.switchTo().frame("mainFrame").切换到某个window:driver.switchTo().window("windowName").上一页下一页返回7.3Web自动化测试

(10)拖拉(DragandDrop).WebElementelement=driver.findElement(By.name("source")).WebElementtarget=driver.findElement(By.name("target")).(newActions(driver)).dragAndDrop(element.target).perform().上一页下一页返回7.3Web自动化测试

(11)导航(NavigationandHistory).打开一个新的页面:driver.navigate().to("http://www.example.com").通过历史导航返回原页面:driver.navigate().forward().driver.navigate().back().上一页下一页返回7.3Web自动化测试

5)高级使用(1)读取Cookie.经常要对Cookie的值进行读取和设置.增加Cookie://Nowsetthecookie.ThisoneˈsvalidfortheentiredomainCookiecookie=newCookie("key"."value").driver.manage().addCookie(cookie).上一页下一页返回7.3Web自动化测试

获取Cookie的值://AndnowoutputalltheavailablecookiesforthecurrentURLSet<Cookie>allCookies=driver.manage().getCookies().for(CookieloadedCookie:allCookies){System.out.println(String.format("%s->%s".loadedCookie.getName上一页下一页返回7.3Web自动化测试

().loadedCookie.getValue())).}根据某个Cookie的name获取Cookie的值:driver.manage().getCookieNamed("mmsid").删除Cookie://Youcandeletecookiesin3ways//Bynamedriver.manage().deleteCookieNamed("CookieName").上一页下一页返回7.3Web自动化测试

//ByCookiedriver.manage().deleteCookie(loadedCookie).//Orallofthemdriver.manage().deleteAllCookies().(2)调用JavaScript.WebDriver对JavaScript的调用是通过JavaScriptExecutor来实现的.例如:上一页下一页返回7.3Web自动化测试

JavascriptExecutorjs=(JavascriptExecutor)driver.js.executeScript("(function(){inventoryGridMgr.setTableFieldVal ̄ue(ˈ+inventoryId+"ˈ.ˈ"+fieldName+"ˈ.ˈ"+value+"ˈ).})()").上一页下一页返回7.3Web自动化测试

(3)WebDriver截图.用WebDriver截图:driver=webdriver.Firefox()driver.save_screenshot("C:\error.jpg")(4)页面等待.因为加载页面需要一段时间.如果页面还没加载完就查找元素.必然是查找不到的.最好的方式就是设置一个默认等待时间.在查找页面元素的时候如果找不到就等待一段时间再找.直到超时.上一页下一页返回7.3Web自动化测试

WebDriver提供两种方法.一种是显性等待.另一种是隐性等待.显性等待:WebDriverdriver=newFirefoxDriver().driver.get("http://somedomain/url_that_delays_loading").WebElementmyDynamicElement=(newWebDriverWait(driver.10))上一页下一页返回7.3Web自动化测试

.until(newExpectedCondition<WebElement>(){@OverridepublicWebElementapply(WebDriverd){returnd.findElement(By.id("myDynamicElement")).}}).上一页下一页返回7.3Web自动化测试

(5)隐性等待:WebDriverdriver=newFirefoxDriver().driver.manage().timeouts().implicitlyWait(10.TimeUnit.SECONDS).driver.get("http://somedomain/url_that_delays_loading").WebElementmyDynamicElement=driver.findElement(By.id("myDynamicEle ̄ment")).上一页返回7.4移动端UI自动化框架7.4.1框架初识Appium是一个开源、跨平台的测试框架.可以用来测试原生及混合的移动端应用.Ap ̄pium支持iOS、Android及FirefoxOS平台.Appium使用WebDriver的JSONWire协议.来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架.Appium对iOS系统的支持得益于DanCuellars对于iOS自动化的研究.Appium也集成了Selendroid.以支持Android的老版本.下一页返回7.4移动端UI自动化框架

Appium选择了client-server的设计模式.只要client能够发送HTTP请求给server.cli ̄ent用什么语言来实现都是可以的.这就是为什么Appium及WebDriver能够支持多语言.如果只使用苹果公司的UIAutomation.则只能用JavaScript来编写测试用例.而且只能用In ̄struction来运行测试用例.同样.如果只使用谷歌公司的UIAutomation.则只能用Java来编写测试用例.Appium实现了真正的跨平台自动化测试.选择Appium的原因如下:(1)Appium支持Android和iOS自动化测试.上一页下一页返回7.4移动端UI自动化框架

(2)Appium支持SeleniumWebDriver所支持的所有语言.如Java、Object-C、JavaS ̄cript、Php、Python、Ruby、C#、Clojure.以及Perl语言.还可以使用SeleniumWebDriver的API.(3)Appium是一个开源框架.方便扩展和定制.7.4.2环境搭建1.安装node.js(1)到官网下载安装软件(https://nodejs.org/en/download/).如图7-8所示.上一页下一页返回7.4移动端UI自动化框架

(2)获取安装文件后.直接双击安装文件.根据程序的提示.完成node.js的安装.(3)安装完成后.运行cmd.输入“node-v”.如果安装成功.会输出对应的版本信息.如图7-9所示.2.配置AndroidSDK环境(1)SDK环境配置:http://www.cnblogs.com/puresoul/p/4597211.html.(2)确保安装了Level17或以上版本的API.(3)设置ANDROID_HOME系统变量为用户的AndroidSDK路径.如图7-10所示:上一页下一页返回7.4移动端UI自动化框架

(4)把“tools”和“platform-tools”两个目录加入到系统的Path路径里.如图7-11所示:F:\ProgramFiles(x86)\Android\android-sdk\platform-tools.F:\ProgramFiles(x86)\Android\android-sdk\tools3.安装手机驱动并测试连接真机完成上述步骤以后.将手机与PC通过USB线相连.在cmd中输入“adbdevices”.若能看到设备则表示连接成功.上一页下一页返回7.4移动端UI自动化框架

4.安装Appium(1)下载安装文件:https://bitbucket.org/appium/appium.app/downloads/.(2)直接双击“appium-installerexe”文件进行安装.桌面上会生成一个Appium的图标.(3)把node_modules的“bin”目录放到系统的Path路径里.C:\ProgramFiles(x86)\Appium\node_modules\.bin上一页下一页返回7.4移动端UI自动化框架

(4)检查Appium所需的环境是否成功.进入cmd命令行.输入“appium-doctor”.出现提示“AllChecksweresuccessful”.说明环境成功.5.配置UI自动化项目(1)启动IntelliJIDEA.如图7-15所示.(2)新建Maven项目.单击“Next”按钮.如图7-16所示.(3)输入Maven项目的GroupId和ArtifactId.单击“Next”按钮.如图7-17所示.上一页下一页返回7.4移动端UI自动化框架

(4)输入工程名称.单击“Finish”按钮.完成项目创建.如图7-18所示.(5)打开Maven配置文件.导入Selenium安装包.在Maven文件中增加如下配置.如图7-19所示:<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId>上一页下一页返回7.4移动端UI自动化框架

<version>3.4.0</version></dependency><dependency><groupId>io.appium</groupId><artifactId>java-client</artifactId><version>3.4.0</version></dependency>上一页下一页返回7.4移动端UI自动化框架

(6)单击Maven项目→重新导入按钮.重新导入Maven包.如图7-20所示.(7)至此.完成配置.6.测试APP下载(1)下载测试的文件ContactManager.apk:https://github.com/appium/sample-code/tree/master/sample-code/apps/ContactManager(2)将下载的APK放到项目的“apps”目录下.如图7-21所示.上一页下一页返回7.4移动端UI自动化框架

7.4.3框架API介绍1.打开一个应用在开始了解AppiumAPI之前.需要了解API的驱动是怎么初始化的.并启动APP上的应用.前面已经了解了Selenium的启动方式.Appium的启动方式与Selenium相似.但是在启动之前需要配置应用的启动信息.才能让驱动识别出要测试的应用.并分配元素解析策略.如图7-22所示.上一页下一页返回7.4移动端UI自动化框架

AppiumDriverdriver.FileclasspathRoot=newFile(System.getProperty("user.dir")).FileappDir=newFile(classpathRoot."/apps").Fileapp=newFile(appDir."ContactManager.apk").上一页下一页返回7.4移动端UI自动化框架

DesiredCapabilitiescapabilities=newDesiredCapabilities().capabilities.setCapability("deviceName"."4d1219502472216f").capabilities.setCapability("platformVersion"."4.4").capabilities.setCapability("app".app.getAbsolutePath()).上一页下一页返回7.4移动端UI自动化框架

capabilities.setCapability("appPackage"."com.example.android.con ̄tactmanager").capabilities.setCapability("appActivity".".ContactManager").driver=newAndroidDriver<AndroidElement>(newURL("http://127.0.0.1:4723/wd/hub").capabilities).System.out.println("Appislaunched!").上一页下一页返回7.4移动端UI自动化框架

2.基本操作1)getAppStrings()默认系统语言对应的“Strings.xml”文件内的数据.2)getAppStrings(Stringlanguage)查找某一个语言环境对应的字符串文件“Strings.xml”内的数据.3)sendKeyEvent(intkey)按下某个键.具体哪个键由key值决定.key值定义在AndroidKeyCode类中:driver.sendKeyEvent(AndroidKeyCode.BACK).//发送回退键上一页下一页返回7.4移动端UI自动化框架

4)sendKeyEvent(intkey.Integermetastate)在按下某个键的同时按下附加键(Ctrl/Alt/Shift键等).具体是哪些键.由key值(在AndroidKeyCode类中定义)和metastate值(在AndroidKeyMetastate类中定义)决定:driver.sendKeyEvent(AndroidKeyCode.BACK.AndroidKeyMetastate.META_ALT_LEFT_ON).//发送左Alt+回退键上一页下一页返回7.4移动端UI自动化框架

5)currentActivity()获取当前activity.比如(.ApiDemos):driver.currentActivity().//获取当前的activity6)isAppInstalled(StringbundleId)根据bundleId来判断该应用是否已经安装.7)installApp(StringappPath)安装APP.appPath为应用的本地路径.上一页下一页返回7.4移动端UI自动化框架

8)removeApp(StringbundleId)卸载APP.bundleId在Android系统中代表的是报名.而在iOS中有专门的bundleId号.9)closeApp()关闭应用.其实就是按Home键把应用置于后台.10)launchApp()启动应用.11)resetApp()先关闭App.然后再启动APP.上一页下一页返回7.4移动端UI自动化框架

12)pushFile(StringremotePath.byte[]base64Data)将字符数组用64位格式写到远程目录的某个文件中.也可以理解为把本地文件push到设备上.13)pullFile(StringremotePath)将设备上的文件pull到本地硬盘上.14)pullFolder(StringremotePath)将设备上的文件夹pull到本地硬盘上.一般远程文件为“/data/local/tmp”下的文件.上一页下一页返回7.4移动端UI自动化框架

15)setNetworkConnection(NetworkConnectionSettingconnection)设置手机的网络连接状态.可以开关蓝牙、WiFi、数据流量.通过NetworkConnectionS ̄etting中的属性来设置各个网络连接的状态:driver.setNetworkConnection(newNetworkConnectionSetting(false.true.false)).//设置当前状态.飞行模式关闭、WiFi开启、数据网络关闭上一页下一页返回7.4移动端UI自动化框架

16)openNotifications()打开通知栏.17)runAppInBackground(intseconds)与resetApp类似.区别是resetApp关闭后立即启动.而这个方法是关闭后等待seconds秒后再启动.18)hideKeyboard()在iOS系统中隐藏键盘.19)hideKeyboard(Stringstrategy.StringkeyName)隐藏键盘.只能用于iOS系统.上一页下一页返回7.4移动端UI自动化框架

20)performTouchAction(TouchActiontouchAction)执行一个touch动作.该touch动作是由TouchAction封装的:TouchActiontouchAction=newTouchAction(dr).touchAction.moveTo(10.100).driver.performTouchAction(touchAction).21)performMultiTouchAction(MultiTouchActionmultiAction)上一页下一页返回7.4移动端UI自动化框架

执行多步touch动作.即由MultiTouchAction封装的多步操作:TouchActiontouchAction=newTouchAction(dr).touchAction.moveTo(10.100).MultiTouchActionmultiTouchAction=newMultiTouchAction(driver).上一页下一页返回7.4移动端UI自动化框架

multiTouchAction.add(touchAction).driver.performMultiTouchAction(multiTouchAction).22)tap(intfingers.WebElementelement.intduration)按下element控件中心点.duration×5毫秒后松开.如此重复fingers次:上一页下一页返回7.4移动端UI自动化框架

List<AndroidElement>androidElement=driver.findElements(By.id("kw")).driver.tap(5.androidElement.get(0).5).23)tap(intfingers.intx.inty.intduration)按下(x.y)点.duration×5毫秒后松开.如此重复fingers次.24)swipe(intstartx.intstarty.intendx.intendy.intduration)上一页下一页返回7.4移动端UI自动化框架

从(startx.starty)滑到(endx.endy).分duration步滑.每一步用时是5毫秒.25)pinch(WebElementel)用2个手指操作控件.从对角线向中心点滑动:List<AndroidElement>androidElement=driver.findElements(By.id("kw")).driver.pinch(androidElement.get(0)).上一页下一页返回7.4移动端UI自动化框架

26)pinch(intx.inty)以(x.y)为基准.计算得出(x.y-100).(x.y+100)两个点.然后用2个手指按住这两个点同时滑到(x.y).27)zoom(WebElementel)与pinch(el)的动作刚好相反.用两个手指由控件的中心点慢慢移向控件的左顶点后右底点滑动.28)zoom(intx.inty)和pinch(x.y)的动作相反.用两个手指从(x.y)点开始向(x.y-100)和(x.y+100)两个点滑动.上一页下一页返回7.4移动端UI自动化框架

29)getNamedTextField(Stringname)一般

温馨提示

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

评论

0/150

提交评论