接前面例子
一:模擬用戶操作
找到頁面元素來模擬用戶的操作:比如抖音的這些元素,我弄了個簡單的場景:點擊幫助,點擊反饋,輸入內容,發送
可以拿這個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;
查了一下:TestNG和Maven相關的類文件之間不兼容
解決方法:卸載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