AndroidContactsTest.Javajavascript
public class AndroidContactsTest { //Driver private AppiumDriver<AndroidElement> driver; /** * 配置啓動driver * @throws Exception */ @Before public void setUp() throws Exception { File classpathRoot = new File(System.getProperty("user.dir")); //app的目錄 File appDir = new File(classpathRoot, "/src/main/java/apps/"); //app的名字,對應你apps目錄下的文件 File app = new File(appDir, "ContactManager.apk"); //建立Capabilities DesiredCapabilities capabilities = new DesiredCapabilities(); //設置要調試的模擬器的名字 capabilities.setCapability("deviceName","minote"); //設置模擬器的系統版本 capabilities.setCapability("platformVersion", "4.4.2"); //設置app的路徑 capabilities.setCapability("app", app.getAbsolutePath()); //設置app的包名 capabilities.setCapability("appPackage", "com.example.android.contactmanager"); //設置app的啓動activity capabilities.setCapability("appActivity", ".ContactManager"); //啓動driver driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } @After public void tearDown() throws Exception { //測試完畢,關閉driver,不關閉將會致使會話還存在,下次啓動就會報錯 driver.quit(); } /** * 要執行的的測試方法 */ @Test public void addContact(){ //利用Xpath的方法尋找text值爲Add Contact的控件 WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']")); //點擊這個控件 el.click(); //利用類名獲取界面上全部的EditText List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText"); //第一個EditText輸入內容Some Name textFieldsList.get(0).sendKeys("Some Name"); //第三個EditText輸入內容Some Name textFieldsList.get(2).sendKeys("Some@example.com"); //在坐(100,500)滑動到(100,100) 時間爲2毫秒 driver.swipe(100, 500, 100, 100, 2); //用xpath的方式尋找到text值爲Save的控件,而後點擊 driver.findElementByXPath(".//*[@text='Save']").click(); } }
Selenium是一套完整的web自動化測試工具集,它包含了測試的錄製(Selenium IDE)、編寫及運行(Selenium Remote Control)和測試的並行處理(Selenium Grid)、WebDriver(selenium 2.0)等。Selenium的核心Selenium Core基於JsUnit,徹底由JavaScript編寫,所以可運行於任何支持javascript的瀏覽器上。與WatiN相同,Selenium也是一款一樣使用Apache License 2.0協議發佈的開源框架java
Selenium IDE 是firefox瀏覽器的一個插件。提供簡單的腳本錄製、編輯與回放功能。node
Selenium Grid 是用來對測試腳步作分佈式處理。如今已經集成到selenium server 中了。linux
RC和WebDriver 更多應該把它當作一套規範,在這套規範裏定義客戶端腳步與瀏覽器交互的協議。以及元素定位與操做的接口。android
其實它就是一層基礎的協議規範。ios
假如說:Webdriver API(接口規範)說,咱們要提供一個頁面元素id的定位方法。web
import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver;//導入java版的selenium(webdriver) findElement(By.id("xx")); //id定位方法
把寫好這些操做頁面元素的方法(用例)組織起來執行並輸入測試結果,是由編程語言的單元測試框架去完成的。如java 的junit和testng單元測試框架(以後會說,替換Testng)。編程
如何並行的執行測試用例,並行要求「同時」執行多條用例,這個也是由編程語言的多線程技術實現的。windows
並行能夠用Selenium Grid或者Testng來實現。api
Selenium Grid 不是能夠實現分佈式執行麼?分佈式的概念是寫好一條用例能夠調用不一樣的平臺執行,如 A電腦上有一個測試用例,能夠調用B電腦(Linux)的Firefox瀏覽器來跑A電腦上的測試用例;也能夠調用C電腦(windows)的Chrome瀏覽器來跑A電腦上的測試用例。這是分佈式的概念。
說了那麼多,其實Appium專業作MobileApp的自動化的,selenium只能操做iOS和Android的默認瀏覽器。
從本質上來說,appium一樣繼承了WebDriver API的接口規範。Appium 一樣是支持多種編程語言, 而後Appium還包含了Selenium。
so Appium是很是強大的,可用於測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。可用於ios和android以及firefox的操做系統。原生的應用是指用android或ios的sdk編寫的應用,移動網頁應用是指網頁應用,相似於ios中safari應用或者Chrome應用或者類瀏覽器的應用。混合應用是指一種包裹webview的應用,原生應用於網頁內容交互性的應用。
重要的是Appium是跨平臺的,何爲跨平臺,意思就是能夠針對不一樣的平臺用一套api來編寫測試用例。
Appium界面
Android相關的設置,爲何要設置呢,由於這裏設置主要爲了避免用在腳本里面添加capabilities屬性和inspector檢測使用。
一些意思翻譯過來就明白了,也很少說了
服務器、日誌記錄 設置。這裏服務器是本機,端口是4723,這是appium的端口,不是你模擬器的端口,不要搞混了,不用修改。
這沒什麼好說了,主要看當前版本
放大鏡工具,獲取app界面控件屬性的工具,我的認爲:截屏速度快,支持元素點擊(MAC的比較屌,能記錄,滑動,搖一搖等等)。但沒有層次感,選中控件沒有提示框,屬性沒分割很差看。這裏推薦使用sdk自帶的Android Device Monitor,主要是看id和佈局。
仍是介紹一下他的使用方法:
界面我都註釋了:
界面右上角的的三角按鈕
中間黑色背景,是顯示日誌的,這個日誌有用,調試運行過程當中都會輸出日誌,報錯都得靠他,輸出內容有:
info: Appium的調試信息
error 出現錯誤時候的錯誤信息,這個很重要,解決出錯問題就看這裏了
主界面的右下角的垃圾桶,就是清除日誌的,強迫症的點點點。
ps: 有些內容來自互聯網