APP自動化測試(三)-appium

接前面例子

 

一:模擬用戶操作

找到頁面元素來模擬用戶的操作:比如抖音的這些元素,我弄了個簡單的場景:點擊幫助,點擊反饋,輸入內容,發送

可以拿這個resource-id,如果沒有也可以用其他的

比如:

ID定位(取resource-id、id、name)

class、text定位(取class、text)

xpath定位

座標點定位

於是我使用name

測試的時候報了bug:Locator Strategy 'name' is not supported for this session就是元素找不到

原因是1.7版本不支持了,那就修改源碼

C:\Users\AUSU\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-android-driver\build\lib

找到driver.js,查找 this.locatorStrategies 

一些定位方式可以參考:https://www.cnblogs.com/davieyang/p/10063549.html

package com.javaAuto;

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.android.AndroidDriver;

public class JavaAutoTest {
//	全局變量
	public static AndroidDriver<WebElement> androidDriver;
//	main
	public static void main(String []agrs) throws Exception{
//		創建配置對象
		DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
//		添加配置(設備、設備類型、包名、活動啓動入口)
		desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
		desiredCapabilities.setCapability("platformName", "Android");
		desiredCapabilities.setCapability("appPackage", "com.ss.android.ugc.aweme");
		desiredCapabilities.setCapability("appActivity", ".account.white.login.DYLoginActivity");
		desiredCapabilities.setCapability("automationName", "UiAutomator1");
		
//		創建驅動(appium通信地址,配置對象)
		androidDriver = new AndroidDriver<WebElement>(
				new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
		
		login();
	
	}
	
	
	public static void login() throws Exception{
//		因爲畫面出現較慢,代碼執行較快,所以會出現元素找不到的問題,可以先給個時間讓它加載完
		Thread.sleep(10000);
//		找到幫助然後點擊
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/bn0").click();
		Thread.sleep(10000);
//		找到我的反饋然後點擊
		androidDriver.findElement(By.name("我的反饋")).click();
		Thread.sleep(10000);
//		點擊輸入框
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/hbj").click();
//		點擊輸入"123456789"
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/a2q").sendKeys("123456789");
//		點擊發送
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/ekd").click();
		
		
	}

}

運行後,在最後一步提交出現toast提示“加載失敗,請稍後重試”,這是bug???好吧我也不確認,留着先

還有就是我輸入不了中文,好像用UiAutomator2可以,我換成2的話就報錯,估計是安卓版本問題

 

 

在這裏加入這個依賴

在eclipse還要安裝TestNG插件(有些版本集成這些插件不用安裝,我的版本低了一點)

TestNG是一個開源自動化測試框架,我用了離線的方式下載

TestNG官網地址:http://testng.org/,點擊download

選了一個靠中一點的,應該穩定一點吧

將下載的zip文件,無需解壓,直接放到eclipse的dropins文件夾下

在eclipse的help-安裝軟件裏面,選中那個壓縮包,填下名稱testNG

後面的都確定就行了,裝了很久,等到花兒都謝了,安裝好了重啓,在新建-其他,看到這東西就OK了

 

 

回到正題,在類那裏右鍵-TestNG-Convert to TestNG

發現。。。沒反應,試着換了個版本看看,先卸載掉

重新換了個包,發現這裏是2了,應該可以了吧

好吧,還是安裝失敗了,心酸的故事

 

想了一會,是不是我eclipse版本(4.6)太低了,於是選中這種方式下載

然後又是漫長的等待

安裝太久了,要睡覺然後取消了

早上起來再來安裝一次,在幫助-安裝軟件,點擊ADD,裏面輸入下面這些內容

Name填寫testng
Location填寫http://dl.bintray.com/testng-team/testng-eclipse-release/

隔了很久很久很久,彈出這些信息 

保持我的安裝不變,並將正在安裝的項修改爲兼容
更新我的安裝以與正在安裝的項目兼容
顯示原始錯誤並生成我自己的解決方案

直接就安裝了,他奶奶的終於可以了

 

 

再次回到正題,在類那裏右鍵-TestNG-Convert to TestNG

居然沒有自動生成,圈住的部分只能手寫

 

package com.javaAuto;

import java.net.URL;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;

public class JavaAutoTest {
//	全局變量
	public static AndroidDriver<WebElement> androidDriver;
//	main

//	在測試前進行初始化
	@BeforeTest
	public void setUp() throws Exception{
//		創建配置對象
		DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
//		添加配置(設備、設備類型、包名、活動啓動入口)
		desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
		desiredCapabilities.setCapability("platformName", "Android");
		desiredCapabilities.setCapability("appPackage", "com.ss.android.ugc.aweme");
		desiredCapabilities.setCapability("appActivity", ".account.white.login.DYLoginActivity");
		desiredCapabilities.setCapability("automationName", "UiAutomator1");
		
//		創建驅動(appium通信地址,配置對象)
		androidDriver = new AndroidDriver<WebElement>(
				new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
		
	}
	
//	測試用例
	@Test
	public void login() throws Exception{
//		因爲畫面出現較慢,代碼執行較快,所以會出現元素找不到的問題,可以先給個時間讓它加載完
		Thread.sleep(10000);
//		找到幫助然後點擊
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/bn0").click();
		Thread.sleep(10000);
//		找到我的反饋然後點擊
		androidDriver.findElement(By.name("我的反饋")).click();
		Thread.sleep(10000);
//		點擊輸入框
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/hbj").click();
//		點擊輸入"123456789"
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/a2q").sendKeys("123456789");
//		點擊發送
		androidDriver.findElementById("com.ss.android.ugc.aweme:id/ekd").click();
			
	}
	
//	銷燬資源
	@AfterTest
	public void testDown(){
//		用例運行完畢後銷燬驅動
		androidDriver.quit();
	}

}

因爲沒有main方法,通過這種方式運行

運行報錯:org.testng.eclipse.maven.MavenTestNGLaunchConfigurationProvider.getClasspath(Lorg/eclipse/debug/core/ILaunchConfiguration;)Ljava/util/List;

查了一下:TestNGMaven相關的類文件之間不兼容

解決方法:卸載TestNG插件的可選M2E(Maven ...)部分

再次運行,成功

 

接下來是加斷言

在提交後是進入聊天頁面的,顯示我提交的信息

adb shell dumpsys activity | find "mFocusedActivity"

在login方法裏面加上

        Thread.sleep(10000);
//		斷言
//		期望結果
		String qw = ".feedback.FeedbackActivity";
//		實際結果(這裏能獲得實際的活動名)
		String sj = androidDriver.currentActivity();
		org.testng.Assert.assertEquals(qw, sj);

跑完後是失敗的。。難道真是個bug???還是腳本寫的有問題???

 

 

後續學習:https://blog.csdn.net/weixin_42717928/article/details/106866226

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