APP的UI自動化demo(appium+java)

文章目錄

    • appium連接手機
    • java代碼實現-第一版
    • 第二版-接入testng和隱式等待顯示等待

appium連接手機

準備工作
1、查看連接手機模擬器是否連接成功,獲取設備名稱
執行命令:adb devices

2、查看android內核版本號—>paltformVersion
執行命令:adb shell getprop ro.build.version.release

3、模擬器上打開要測試的app,查看包名和活動名
adb shell dumpsys window |grep mCurrentFocus

在這里插入圖片描述

打開并啟動appium
之前出現過appium連接不上手機模擬器,在修改配置中JAVA_HOME和ANDROID_HOME填寫下正確的路徑后可以了
在這里插入圖片描述

在這里插入圖片描述
點擊打開連接配置頁面
在這里插入圖片描述

填寫并保存后點擊【start Session】

{"platformName": "Android","platformVersion": "11","deviceName": "emulator-5554","appPackage": "com.wandoujia.phoenix2","appActivity": "com.pp.assistant.activity.PPMainActivity"
}

在這里插入圖片描述
連接后頁面
在這里插入圖片描述

java代碼實現-第一版

pom

 <dependency><groupId>io.appium</groupId><artifactId>java-client</artifactId><version>9.1.0</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-remote-driver</artifactId><version>4.9.1</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-api</artifactId><version>4.9.0</version></dependency>

查找比較新的jar地址
阿里云maven倉庫
在這里插入圖片描述

import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import java.net.URL;public class AppTest {public static void main(String[] args) throws Exception {AndroidDriver driver = null;DesiredCapabilities cap = new DesiredCapabilities();cap.setCapability("platformName", "Android");cap.setCapability("platformVersion", "11");cap.setCapability("deviceName", "emulator-5554");cap.setCapability("appPackage", "com.wandoujia.phoenix2");cap.setCapability("appActivity", "com.pp.assistant.activity.PPMainActivity");cap.setCapability("unicodeKeyboard", "true");cap.setCapability("resetKeyboard", "true");cap.setCapability("noSign", "true");driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);Thread.sleep(5000);//點擊【同意】driver.findElement(By.id("com.wandoujia.phoenix2:id/n8")).click();Thread.sleep(2000);//點擊系統的返回driver.pressKey(new KeyEvent(AndroidKey.BACK));Thread.sleep(5000);driver.quit();}
}

在這里插入圖片描述

第二版-接入testng和隱式等待顯示等待

import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;import org.openqa.selenium.remote.DesiredCapabilities;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.*;import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;public class AppTest {AndroidDriver driver;@BeforeClasspublic void setUp() throws MalformedURLException, InterruptedException {DesiredCapabilities cap = new DesiredCapabilities();cap.setCapability("platformName", "Android");cap.setCapability("platformVersion", "11");cap.setCapability("deviceName", "emulator-5554");cap.setCapability("appPackage", "com.wandoujia.phoenix2");cap.setCapability("appActivity", "com.pp.assistant.activity.PPMainActivity");cap.setCapability("unicodeKeyboard", "true");cap.setCapability("resetKeyboard", "true");cap.setCapability("noSign", "true");driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);//隱式等待driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));}@Testpublic void testNew() {//顯示等待WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10), Duration.ofSeconds(1));WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("com.wandoujia.phoenix2:id/n8")));element.click();driver.pressKey(new KeyEvent(AndroidKey.BACK));}@AfterClasspublic void tearDown() {driver.quit();}}

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>app_ui</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>18</maven.compiler.source><maven.compiler.target>18</maven.compiler.target></properties><dependencies><dependency><groupId>io.appium</groupId><artifactId>java-client</artifactId><version>9.1.0</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-remote-driver</artifactId><version>4.9.1</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-api</artifactId><version>4.9.0</version></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.4.0</version> <!-- 這里使用最新版本的 TestNG --><scope>test</scope></dependency></dependencies><build><plugins><!-- Maven Surefire 插件,用于運行 TestNG 測試 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version> <!-- 這里使用最新版本的 Maven Surefire 插件 --><configuration><suiteXmlFiles><!-- 指定 TestNG 測試套件 XML 文件 --><suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile></suiteXmlFiles></configuration></plugin></plugins></build></project>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696885.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MQL語言實現單元測試

文章目錄 一、單元測試是什么二、單元測試的過程三、為什么需要單元測試四、MQL測試代碼實現 一、單元測試是什么 單元測試是對軟件中最小可測單元&#xff08;如類或函數&#xff09;進行獨立驗證和檢查的過程。它是由開發工程師完成的&#xff0c;旨在確保每個單元的功能和邏…

Postman接口關聯實戰解析

在使用postman做接口測試時&#xff0c;有時候后面的接口需要獲取前面接口的某一個返回值做為請求參數&#xff0c;這時就可以使用關聯。 如從A接口提取出a字段的值&#xff0c;供B接口的b字段使用。 一個接口的返回報文如下&#xff1a; {"retCode": "0&quo…

SwiftUI 集合視圖(Grid)拖放交換 Cell 的極簡實現

概覽 自從 SwiftUI 橫空出世那天起&#xff0c;小伙伴們都感受到了它驚人的簡單與便捷。而在本課中&#xff0c;我們將會用一個小“栗子”更直觀的讓大家體驗到它無與倫比簡潔的描述性特質&#xff1a; 如上圖所示&#xff0c;我們在 SwiftUI 中實現了 Grid 中拖放交換 Cell 的…

基于SpringBoot + Layui的社區物業管理系統

項目介紹 社區物業管理系統是基于java編程語言&#xff0c;springboot框架&#xff0c;idea工具&#xff0c;mysql數據庫進行開發&#xff0c;本系統分為業主和管理員兩個角色&#xff0c;業主可以登陸系統&#xff0c;查看車位費用信息&#xff0c;查看物業費用信息&#xff0…

2個wordpress優化SEO主題模板

SEO優化wordpress主題 簡潔的SEO優化wordpress主題&#xff0c;效果好不好&#xff0c;結果會告訴你&#xff0c;適合SEO公司使用的主題。 https://www.jianzhanpress.com/?p2804 SEO優化海外WordPress主題 簡潔的SEO優化海外服務商WordPress主題&#xff0c;為中國制造202…

C# byte[]、struct、intptr、byte[]和byte*等的相互轉換

struct、byte[]互相轉換 //struct轉換為byte[] public static byte[] StructToBytes(object structObj) {int size Marshal.SizeOf(structObj);IntPtr buffer Marshal.AllocHGlobal(size);try{Marshal.StructureToPtr(structObj, buffer, false);byte[] bytes new byte[siz…

HTTP REST 方式調用WebService接口(wsdl)

一、WebService接口正常使用SOAP協議調用&#xff0c;測試時常采用SoapUI軟件調用&#xff0c;具體如下&#xff1a; 二、由于目前主流web服務逐漸轉換為RESTful的形式&#xff0c;且SOAP協議的實現也是基于HTTP協議&#xff0c;故存在通過HTTP調用WebService接口的可能 2.1 …

Flink雙流(join)

一、介紹 Join大體分類只有兩種&#xff1a;Window Join和Interval Join Window Join有可以根據Window的類型細分出3種&#xff1a;Tumbling(滾動) Window Join、Sliding(滑動) Window Join、Session(會話) Widnow Join。 &#x1f338;Window 類型的join都是利用window的機制…

【OpenFeign常用配置】

OpenFeign常用配置 快速入門&#xff1a;1、引入依賴2、啟用OpenFeign 實踐1、引入依賴2、開啟連接池功能3、模塊劃分4、日志5、重試 快速入門&#xff1a; OpenFeign是一個聲明式的http客戶端&#xff0c;是spring cloud在eureka公司開源的feign基礎上改造而來。其作用及時基于…

C++ template-2

第 5 章 基礎技巧 5.1 typename 關鍵字 關鍵字typename在C標準化過程中被引入進來&#xff0c;用來澄清模板內部的一個標識符代表的 是某種類型&#xff0c;而不是數據成員。考慮下面這個例子&#xff1a; template<typename T> class MyClass { public:void foo() {t…

【代碼隨想錄算法訓練營Day09】28.實現 strStr(); 459.重復的子字符串

文章目錄 Day 9 第四章 字符串part0228. 實現 strStr() &#xff08;本題可以跳過&#xff09;KMP 思路KMP 代碼 459.重復的子字符串 &#xff08;本題可以跳過&#xff09;字符串總結雙指針回顧 Day 9 第四章 字符串part02 今日任務 28.實現 strStr(); 459.重復的子字符串; 字…

題目:C++快速找到未知長度單鏈表的中間節點。普通方法和高級方法2種解題思路解析。

在數據結構的面試中&#xff0c;經常會出現這樣的問題&#xff1a;如何快速找到未知長度單鏈表的中間節點&#xff1f;通常&#xff0c;面試官會期待你提供兩種解法&#xff1a;一種是最基本的普通方法&#xff0c;另一種是更高效的 advanced 方法。本文將詳細介紹這兩種方法。…

Nginx -2

接著上文寫 5.4.7 驗證模塊 需要輸入用戶名和密碼 模塊名稱&#xff1a;ngx_http_auth_basic_module 訪問控制基于模塊 ngx_http_auth_basic_module 實現&#xff0c;可以通過匹配客戶端資源進行限制 語法&#xff1a; Syntax: auth_basic string | off; Default: auth_ba…

威爾金森功分器基本原理學習筆記

威爾金森功分器基本原理 威爾金森功率分配器的功能是將輸入信號等分或不等分的分配到各個輸出端口&#xff0c;并保持相同輸出相位。環形器雖然有類似功能&#xff0c;但威爾金森功率分配器在應用上具有更寬的帶寬。微帶形功分器的電路結構如圖所示&#xff0c;其中&#xff0…

【OpenAI Sora】何時開放使用?付費課程已上線(sora什么時候開放使用 )

Sora何時開放使用 根據提供的信息&#xff0c;Sora目前還未對廣大用戶開放。OpenAI在2024年2月15日展示了Sora的視頻&#xff0c;但沒有設立等待名單或提供API訪問。Sora仍在開發中&#xff0c;正在接受安全測試&#xff0c;并且尚未向公眾開放使用。 付費課程已上線 根據最…

Vue圖片瀏覽組件v-viewer,支持旋轉、縮放、翻轉等操作

Vue圖片瀏覽組件v-viewer&#xff0c;支持旋轉、縮放、翻轉等操作 之前用過viewer.js&#xff0c;算是市場上用過最全面的圖片預覽。v-viewer&#xff0c;是基于viewer.js的一個圖片瀏覽的Vue組件&#xff0c;支持旋轉、縮放、翻轉等操作。 基本使用 安裝&#xff1a;npm安裝…

費舍爾FISHER金屬探測器探測儀維修F70

美國FISHER LABS費舍爾地下金屬探測器&#xff0c;金屬探測儀等維修&#xff08;考古探金銀銅探寶等儀器&#xff09;。 費舍爾F70視聽目標ID金屬探測器&#xff0c;Fisher 金屬探測器公司成立于1931年&#xff0c;在實驗條件很艱苦的情況下&#xff0c;研發出了地下金屬探測器…

【Python】實現一個類似于Glass2k的Windows窗口透明化軟件

一 背景說明 網上看到一款Windows下的窗口透明化工具Glass2k&#xff08;Glass2k官網&#xff09;&#xff0c;可以簡單地通過快捷鍵實現任意窗口的透明化&#xff0c;還挺方便的&#xff0c;想用Python自己實現一下類似的功能。 軟件已經開源到&#xff1a;窗口透明化小工具開…

【Leetcode】889. 根據前序和后序遍歷構造二叉樹

文章目錄 題目思路代碼結果 題目 題目鏈接 給定兩個整數數組&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一個具有 無重復 值的二叉樹的前序遍歷&#xff0c;postorder 是同一棵樹的后序遍歷&#xff0c;重構并返回二叉樹。 如果存在多個答案&#xff0c;…

CSS基礎屬性

【三】基礎屬性 【1】高度和寬度 &#xff08;1&#xff09;參數 width&#xff08;寬度&#xff09;&#xff1a;用于設置元素的寬度。可以使用具體的數值&#xff08;如像素值&#xff09;或百分比來指定寬度。 height&#xff08;高度&#xff09;&#xff1a;用于設置元…