appium快速入門(java)

一.簡介:

Appium採用CS架構,客戶端測試用例可採用多種語言編程,跟服務端建立一個session,服務端解析後發送指令到手機進行交互。


支持Native app(通過本地的控件訪問),Web app(使用移動瀏覽器訪問的應用)Hybrid app(本地app內嵌webview加載網頁內容),通過context切換上下文。

appium類庫封裝了標準Selenium客戶端類庫,實際對手機的操作使用android的Uiautomator或IOS的Uiautomation。因此Uiautomator有的毛病appium有,Uiautomator沒有的毛病appium也可能有。總之坑深而路遠啊。

二.環境搭建:

JDK

SDK:配置ANDROID_HOME

node_js:(非必須,安裝後可使用cmd啓動appium服務端)

Appium server: node-modle的bin目錄放進path

以上配置完成後,使用appium-doctor檢查所需要的環境是否配置成功

客戶端Java工程依賴jar包:jdk版本和selenium有不兼容的情況,我採用jdk1.7,其餘版本如下。其中java-client在appium官網下載,selenium*在selenium官網下載。


三.編寫測試用例

舉例一個最基本的登錄操作

在啓動session時必須提供Desired Capabilities, Desired Capabilities本質上是以 key value 字典的方式存放,客戶端將這些鍵值對發給服務端,告訴服務端我們想要怎麼測試,可寫在setup中。

teardown中斷開session

用例中執行相關操作以及斷言。

public class AppiumTestJunit {
	AndroidDriver driver;
	
	@Before
	public void setUp() throws Exception {

		DesiredCapabilities cap=new DesiredCapabilities();
		//設備 adb devices查看
		cap.setCapability("deviceName","127.0.0.1:62001");
		//手機系統版本
		cap.setCapability("platformVersion", "5.0");
		//測試引擎,默認Appium,API-level<17的情況下設置爲selendriod
		cap.setCapability("automationName", "Appium");
		//必填,測試平臺,iOS,Android,Firefox OS
		cap.setCapability("platformName", "Android");
		//apk文件路徑,appium運行時會先嚐試安裝再開始測試,如果沒有的話,會根據appActivity和appPackage去目標機器查找目標app
		//cap.setCapability("app", "C:\\Users\\Administrator\\Desktop\\apks\\vcm-release-2.6.0(6).apk");
		//安卓必填 被測應用程序的包名
		cap.setCapability("appPackage", "com.checheyun.vcm");
		//被測應用程序啓動的Activity的名稱
		cap.setCapability("appActivity", ".MainActivity");
		//appium服務端超過設置的時間沒有收到消息時認爲客戶端退出,默認60
		cap.setCapability("newCommandTimeout", 60);
		//等待測試設備ready的超時時間
		cap.setCapability("devicereadyTimeout", 30);
		//是否啓用支持unicode的鍵盤
		cap.setCapability("unicodeKeyboard", true);
		//session結束後是否重置鍵盤
		cap.setCapability("resetKeyboard", true);
		
		driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), cap);
		//設置全局隱式等待30S
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}

	@After
	public void tearDown() throws Exception {
		driver.quit();
	}

	@Test
	public void test() {
		WebElement username=driver.findElementByXPath("//android.widget.EditText[@text=\"請輸入手機號\"]");
		username.sendKeys("xxxxxx");
		WebElement passwd=driver.findElementByXPath("//android.widget.ScrollView/android.view.View/android.view.View[2]/android.widget.EditText");
		passwd.sendKeys("123456");
		driver.findElementByAndroidUIAutomator("new UiSelector().description(\"login_btn\")").click();
		//driver.findElementByAccessibilityId("login_btn").click();
		WebElement me=driver.findElementByXPath("//*[contains(@content-desc,\"bottom_icon\")]/android.view.View[5]/android.widget.TextView");
		String me_cont=me.getText();
		assertTrue("mebtn not exist",me_cont.equals("我的"));
		
	}

}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章