簡體   English   中英

Appium無法識別和滾動Android設備上的元素

[英]Appium not able to identify and scroll element on android device

我正在 android 的時鍾應用程序上嘗試一段 appium 自動化代碼,但我的代碼傾向於跳過滾動邏輯。 我也嘗試 findelement() 和 gettext() 來識別元素,但仍然不成功。 以下是代碼:

package com.test.Clock; 
import org.testng.annotations.Test; 
import io.appium.java_client.AppiumDriver; 
import io.appium.java_client.MobileElement; 
import io.appium.java_client.PerformsTouchActions; 
import io.appium.java_client.TouchAction; 
import io.appium.java_client.android.AndroidDriver; 
import org.testng.annotations.BeforeClass; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.HashMap; 
import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Dimension; 
import org.openqa.selenium.JavascriptExecutor; 
import org.openqa.selenium.NoSuchFrameException; 
import org.openqa.selenium.Point; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.interactions.touch.TouchActions; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import org.testng.annotations.AfterClass; 

public class Clock { 

static WebDriver driver; 
//static AndroidDriver driver; 

@BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("BROWSER_NAME", "Android"); capabilities.setCapability("VERSION", "7.0"); capabilities.setCapability("deviceName","IFZDSCVCKJUWRSOV"); capabilities.setCapability("platformName","Android"); capabilities.setCapability("--session-override",true); capabilities.setCapability("noReset",true); capabilities.setCapability("appPackage", "com.android.deskclock"); capabilities.setCapability("appActivity","com.android.deskclock.AlarmClock"); //driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities); 
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
} 

@Test public void testCal() throws InterruptedException { System.out.println("inside test"); 
WebElement createAlarm=driver.findElement(By.id("amigo:id/amigo_icon0")); //WebElement createAlarm=driver.findElement(By.xpath("//android.widget.Button[@text='Create']")); 
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); createAlarm.click(); 
// WebElement plus=driver.findElement(By.id("amigo:id/amigo_numberpicker_input")); //plus.click(); 
// driver.swipe(6, -188, 0, 0, 2); 
try { 
WebElement frame1=driver.findElement(By.id("com.android.deskclock:id/add_alarm_activity_hourNumber")); 
driver.switchTo().frame(frame1);
} 
catch (NoSuchFrameException e) { 
System.out.println(e.getMessage());
} 
Thread.sleep(2000); 
WebElement gettime=driver.findElement(By.id("com.android.deskclock:id/add_alarm_activity_hourNumber")); 
Thread.sleep(2000); 
System.out.println(gettime.getText()); 
JavascriptExecutor js = (JavascriptExecutor) driver; 
HashMap<String, Double> swipeObject = new HashMap<String, Double>(); System.out.println(swipeObject); 
swipeObject.put("startX", 3.0); 
System.out.println(swipeObject); 
swipeObject.put("startY", -183.8); 
System.out.println(swipeObject); 
swipeObject.put("endX", 0.022); 
System.out.println(swipeObject); 
swipeObject.put("endY", 0.02); 
System.out.println(swipeObject); 
swipeObject.put("duration", 2.0); 
//HashMap[] params = { swipeObject }; 
js.executeScript("mobile: scroll", swipeObject); 
System.out.println(js); 
/*JavascriptExecutor js = (JavascriptExecutor) driver; 
HashMap<String, String> scrollObject = new HashMap<String, String>(); scrollObject.put("direction", "up"); 
js.executeScript("mobile: scroll", scrollObject);*/ 
Thread.sleep(2000); 
WebElement equalTo=driver.findElement(By.id("com.android.deskclock:id/add_alarm_save")); equalTo.click(); 
} 
@AfterClass public void teardown(){ 
//close the app driver.quit();
}
}

以下是 appium 服務器日志:

使用參數調用 AppiumDriver.createSession(): [{"--session-override":true,"BROWSER_NAME":"Android","VERSION":"7.0","appActivity":"com.android.deskclock.AlarmClock" ,"appPackage":"com.android.deskclock","deviceName":"IFZDSCVCKJUWRSOV","noReset":true,"platformName":"Android"},null,{"desiredCapabilities":{"--session-override ":true,"BROWSER_NAME":"Android","VERSION":"7.0","appActivity":"com.android.deskclock.AlarmClock","appPackage":"com.android.deskclock","deviceName": "IFZDSCVCKJUWRSOV","noReset":true,"platformName":"Android"},"firstMatch":[{"platformName":"android"}]}] [BaseDriver] 事件 'newSessionRequested' 記錄在 1528276642225 (14:47) :22 GMT+0530(印度標准時間))[Appium] 無法解析 W3C 功能:“deviceName”不能為空。 回退到 JSONWP 協議。 [Appium] W3C 功能中缺少的 JSONWP 所需功能中提供了以下功能:["--session-override","BROWSER_NAME","VERSION","appActivity","appPackage","deviceName"," noReset","平台名稱"]。 回退到 JSONWP 協議。 [Appium] 創建新的 AndroidDriver (v2.6.0) 會話 [Appium] 功能:[Appium] --session-override:true [Appium] BROWSER_NAME:Android [Appium] VERSION:7.0 [Appium] appActivity:com.android.deskclock。 AlarmClock [Appium] appPackage: com.android.deskclock [Appium] deviceName: IFZDSCVCKJUWRSOV [Appium] noReset: true [Appium] platformName: Android [BaseDriver] 使用 MJSONWP 所需功能創建會話:{"--session-override":true, ... [BaseDriver] 提供了以下功能,但 appium 無法識別:--session-override、BROWSER_NAME、VERSION。 [BaseDriver] Session created with session id: 7118f268-78fb-4b3e-91fa-f46f119d6dba [AndroidDriver] 獲取 Java 版本 [AndroidDriver] Java 版本是:1.8.0_101 [ADB] 檢查 adb 是否存在 [ADB] Using adb.exe from C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe [AndroidDriver] 正在檢索設備列表 [ADB] 正在嘗試查找已連接的 android 設備 [ADB] 正在獲取已連接的設備... [ADB] 1 個設備已連接 [AndroidDriver] 使用設備:IFZDSCVCKJUWRSOV [ADB] 檢查 adb 是否存在 [ADB] 使用來自 C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb 的 adb.exe。 exe [ADB] 將設備 ID 設置為 IFZDSCVCKJUWRSOV [AndroidDriver] 未列出應用程序文件,而是直接在設備上運行 com.android.deskclock [AndroidDriver] 檢查設備上是否存在包 [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCV CKJUWRSOV shell pm list packages com.android.deskclock' [AndroidDriver] 啟動 Android 會話 [ADB] Running 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV等待設備' [ADB] 正在連接設備... [ADB] 已連接 1 個設備 [ADB] 正在運行“C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb。 exe -P 5037 -s IFZDSCVCKJUWRSOV shell echo ping' [AndroidDriver] 將設置 apk 推送到設備... [ADB] 獲取 io.appium.settings 的安裝狀態 [ADB] 獲取連接的設備... [ADB] 1 個設備) connected [ADB] Running 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell pm list packages io.appium.settings' [ADB] App is已安裝 [ADB] 正在獲取“io.appium.settings”的包信息 [ADB] 正在連接設備... [ADB] 已連接 1 個設備 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android \\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell dumpsys package io.app ium.settings' [ADB] 檢查是否存在 aapt [ADB] 使用來自 C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\build-tools\\28.0.0-rc2\\aapt.exe 的 aapt.exe [ADB ] 安裝的 'io.appium.settings' 包不需要升級 ('2.3.0' >= '2.3.0') [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB]運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell ps' [AndroidDriver] io.appium.settings 已經在運行。 無需重置其權限。 [ADB] 正在連接設備... [ADB] 已連接 1 個設備 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell getprop ro.build.version.sdk' [ADB] 當前設備屬性 'ro.build.version.sdk': 24 [ADB] 設備 API 級別:24 [ADB] 獲取連接的設備... [ADB] 1 個設備(s) 已連接 [ADB] 運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell appops set io.appium.settings android:mock_location allow' [AndroidDriver] setDeviceLanguageCountry 需要語言或國家。 [AndroidDriver] 得到語言:'undefined' 和國家:'undefined' [Logcat] 開始 logcat 捕獲 [AndroidDriver] 推送解鎖助手應用到設備... [ADB] 獲取 io.appium.unlock 的安裝狀態 [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell pm list packages io.appium.unlock' [ADB] 應用程序已安裝 [ADB] 正在獲取“io.appium.unlock”的包信息 [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C :\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell dumpsys package io.appium.unlock' [ADB] 檢查是否存在 aapt [ADB] 使用 aapt。 exe from C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\build-tools\\28.0.0-rc2\\aapt.exe [ADB] 安裝的'io.appium.unlock'包不需要升級('2.0 .0' >= '2.0.0') [ADB] 獲取設備平台版本 [ADB] 獲取連接的設備 es... [ADB] 1 個設備已連接 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell getprop ro。 build.version.release' [ADB] 當前設備屬性 'ro.build.version.release': 7.0 [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C:\\Users \\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell wm size' [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell getprop ro.product.model' [ADB] 當前設備屬性 'ro.product.model' : S6s [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell getprop ro.product.manufacturer' [ADB] 當前設備屬性 'ro.product.manufacturer': GIONEE [AndroidDriver] 未發送應用程序,不符合標准唱包/活動 [AndroidDriver] 沒有應用程序功能。 假設它已經在設備上 [AndroidBootstrap] 正在監視引導程序斷開連接 [ADB] 轉發系統:4724 到設備:4724 [ADB] 運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb .exe -P 5037 -s IFZDSCVCKJUWRSOV forward tcp:4724 tcp:4724' [UiAutomator] 啟動 UiAutomator [UiAutomator] 移動到狀態 'starting' [UiAutomator] 解析 uiautomator jar [UiAutomator] 發現 AppjarotA ] 運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV push 'C:\\Program Files (x86)\\Appium\\resources\\app\\node_modules\\ appium-android-bootstrap\\bootstrap\\bin\\AppiumBootstrap.jar' /data/local/tmp/' [ADB] 試圖殺死所有 uiautomator 進程 [ADB] 使用 uiautomator 獲取所有進程 [ADB] 獲取連接的設備... [ADB] ] 1 個設備已連接 [ADB] 運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell ps' [ADB] 未找到 uiautomator 進程到殺死,繼續... [UiAutomator] 正在啟動 UIAutomator [ADB] 使用參數創建 ADB 子進程:["-P",5037,"-s","IFZDSCVCKJUWRSOV","shell","uiautomator","runtest"," AppiumBootstrap.jar","-c","io.appium.android.bootstrap.Bootstrap","-e","pkg","com.android.deskclock","-e","disableAndroidWatchers",false, "-e","acceptSslCerts",false] [UiAutomator] 移動到狀態 'online' [AndroidBootstrap] Android 引導套接字現已連接 [ADB] 正在連接設備... [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 注冊崩潰觀察者。 [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Client connected [ADB] 1 個設備連接 [ADB] Running 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell dumpsys window' [AndroidDriver] 屏幕已經解鎖,什么都不做 [ADB] 設備 API 級別:24 [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C: \\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell am start -W -n com.android.deskclock/com.android.deskclock.AlarmClock -S' [ Appium] 新的 AndroidDriver 會話創建成功,會話 7118f268-78fb-4b3e-91fa-f46f119d6dba 添加到主會話列表 [BaseDriver] 事件“newSessionStarted”記錄在 1528276661138 (14:47:41 GMT+05330) [印度標准時間] ] 用 driver.createSession() 結果響應客戶端:{"platform":"LINUX","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true , "locationContextEnabled":false,"warnings":{},"desired":{"--session-override":true,"BROWSER_NAME":"Android","VERSION":"7.0","appActivity":"com .android.deskclock.AlarmClock","appPackage":"com.android.deskclock","deviceName":"IFZDSCVCKJUWRSOV","noReset":true,"platformName":"Android"},"--session-override" :true,"BROWSER_NAME":"Android","VERSION":"7.0","appActivity":"com.android.deskclock.AlarmClock","appPackage":"com.android.deskclock","deviceName":" IFZDSCVCKJUWRSOV","noReset":true,"platformName":"Android","deviceUDID":"IFZDSCVCKJUWRSOV","platformVersion":"7.0","deviceScreenSize":"1080x1920","deviceModel":"S6s"," deviceManufacturer":"GIONEE"} [HTTP] <-- POST /wd/hub/session 200 18916 ms - 866 [HTTP] [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e-91fa- f46f119d6dba/timeouts [HTTP] {"type":"implicit","ms":15000} [W3C] 錯誤參數:BadParametersError:參數不正確。 我們想要“W3C 協議需要設置任何腳本、頁面加載或隱式”,並且您發送了 {"type":"implicit","ms":15000} [HTTP] <-- POST /wd/hub/session/7118f268 -78fb-4b3e-91fa-f46f119d6dba/timeouts 400 3 ms - 5166 [HTTP] [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba" :"id","value":"amigo:id/amigo_icon0"} [W3C] 使用參數調用 AppiumDriver.findElement(): ["id","amigo:id/amigo_icon0","7118f268-78fb-4b3e-91fa -f46f119d6dba"] [BaseDriver] 此請求的有效定位器策略:xpath、id、類名、可訪問性 id、-android uiautomator [BaseDriver] 等待 0 毫秒條件 [AndroidBootstrap] 向 android 發送命令:{"cmd": "action","action":"find","params":{"strategy":"id","selector":"amigo:id/amigo_icon0","context":"","multiple":false} } [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 從客戶端得到數據:{"cmd":"action","action":"find","params":{"strategy":"id","selector": "amigo:id/amigo_icon0","context":"","multiple":false}} [ AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了 ACTION 類型的命令 [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了命令動作:find [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 使用 'ID 查找'amigo:id/amigo_icon0' ' with the contextId: '' multiple: false [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=amigo:id/amigo_icon0] [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 返回結果:{ "status":0,"value":{"ELEMENT":"1"}} [AndroidBootstrap] 從引導程序接收命令結果 [W3C] 使用 driver.findElement() 結果響應客戶端:{"ELEMENT":"1" } [HTTP] <-- POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element 200 1496 ms - 87 [HTTP] [HTTP] --> POST /wd/hub/session/7118f268- 78fb-4b3e-91fa-f46f119d6dba/timeouts [HTTP] {"type":"implicit","ms":3000} [W3C] 錯誤參數:BadParametersError:參數不正確。 我們想要“W3C 協議需要設置任何腳本、頁面加載或隱式”,並且您發送了 {"type":"implicit","ms":3000} [HTTP] <-- POST /wd/hub/session/7118f268 -78fb-4b3e-91fa-f46f119d6dba/timeouts 400 2 ms - 5164 [HTTP] [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d16dba {"id":"1"} [W3C] 使用參數調用 AppiumDriver.click(): ["1","7118f268-78fb-4b3e-91fa-f46f119d6dba"] [AndroidBootstrap] 向 android 發送命令:{"cmd" :"action","action":"element:click","params":{"elementId":"1"}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 從客戶端獲取數據:{"cmd":" action","action":"element:click","params":{"elementId":"1"}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了 ACTION 類型的命令 [AndroidBootstrap] [BOOTSTRAP LOG] [ debug] Got command action: click [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":true} [AndroidBootstrap] Received command result from bootstrap [W3C] 用驅動響應客戶端。點擊()重新 sult: true [HTTP] <-- POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element/1/click 200 350 ms - 76 [HTTP] [HTTP] --> POST /wd/ hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element [HTTP] {"using":"id","value":"com.android.deskclock:id/add_alarm_activity_hourNumber"} [W3C] 調用 AppiumDriver.findElement () with args: ["id","com.android.deskclock:id/add_alarm_activity_hourNumber","7118f268-78fb-4b3e-91fa-f46f119d6dba"] [BaseDriver] 此請求的有效定位器策略:xpath, id, class name , 可訪問性 id, -android uiautomator [BaseDriver] 等待條件 [AndroidBootstrap] 最多 0 毫秒 向 android 發送命令:{"cmd":"action","action":"find","params":{"strategy" :"id","selector":"com.android.deskclock:id/add_alarm_activity_hourNumber","context":"","multiple":false}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 從客戶端得到數據: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"com.android.deskclock:id/add_alarm_activity_hourNumber","c ontext":"","multiple":false}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了 ACTION 類型的命令 [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了命令動作:find [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 使用 'ID' 和 contextId 查找 'com.android.deskclock:id/add_alarm_activity_hourNumber':'' multiple: false [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 使用:UiSelector[INSTANCE=0, RESOURCE_ID=com。 android.deskclock:id/add_alarm_activity_hourNumber] [AndroidBootstrap] 從 bootstrap 接收命令結果 [W3C] 使用 driver.findElement() 結果響應客戶端:{"ELEMENT":"2"} [HTTP] <-- POST /wd/hub /session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element 200 1884 ms - 87 [HTTP] [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 返回結果:{"status":0,"value":{"ELEMENT" :"2"}} [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/frame [HTTP] {"id":{"ELEMENT":"2","element -6066-11e4-a52e-4f735466cecf":"2"}} [W3C] 使用參數調用 AppiumDriver.setFrame():[{" ELEMENT":"2","element-6066-11e4-a52e-4f735466cecf":"2"},"7118f268-78fb-4b3e-91fa-f46f119d6dba"] [HTTP] <-- POSTsession /wd/hub/ 7118f268-78fb-4b3e-91fa-f46f119d6dba/frame 404 2 ms - 3078 [HTTP] [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46fing [HTTPelement] ":"id","value":"com.android.deskclock:id/add_alarm_activity_hourNumber"} [W3C] 使用參數調用 AppiumDriver.findElement():["id","com.android.deskclock:id/add_alarm_activity_hourNumber" ,"7118f268-78fb-4b3e-91fa-f46f119d6dba"] [BaseDriver] 此請求的有效定位器策略:xpath、id、類名、可訪問性 id、-android uiautomator [BaseDriver] 等待條件 [AndroidBootstrap] 發送最多 0 毫秒命令 android: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"com.android.deskclock:id/add_alarm_activity_hourNumber", "context":"","multiple":false}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 從客戶端獲取數據:{"cmd":"action","action":"find","params": {“戰略”: "id","selector":"com.android.deskclock:id/add_alarm_activity_hourNumber","context":"","multiple":false}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了 ACTION 類型的命令 [ AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到命令操作:find [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 使用 'ID' 和 contextId 查找'com.android.deskclock:id/add_alarm_activity_hourNumber':'' multiple: false [ AndroidBootstrap] [BOOTSTRAP LOG] [debug] 使用:UiSelector[INSTANCE=0, RESOURCE_ID=com.android.deskclock:id/add_alarm_activity_hourNumber] [AndroidBootstrap] 從 bootstrap 接收命令結果 [W3C] 使用 driver.findElement() 結果響應客戶端: {"ELEMENT":"3"} [HTTP] <-- POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element 200 21 ms - 87 [HTTP] [AndroidBootstrap] [BOOTSTRAP LOG] [調試] 返回結果:{"status":0,"value":{"ELEMENT":"3"}} [HTTP] --> GET /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba /element/3/text [HTTP] {} [W3C] 調用 AppiumDriver.getTex t() with args: ["3","7118f268-78fb-4b3e-91fa-f46f119d6dba"] [AndroidBootstrap] 向 android 發送命令:{"cmd":"action","action":"element:getText", "params":{"elementId":"3"}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 從客戶端獲取數據:{"cmd":"action","action":"element:getText","params ":{"elementId":"3"}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了 ACTION 類型的命令 [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到了命令動作:getText [AndroidBootstrap] 從引導程序接收到的命令結果[W3C] 使用 driver.getText() 結果響應客戶端:"" [HTTP] <-- GET /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element/3/text 200 24 ms - 74 [HTTP] [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 返回結果:{"status":0,"value":""} [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e- 91fa-f46f119d6dba/execute [HTTP] {"script":"mobile: scroll","args":[{"duration":2,"endY":0.02,"endX":0.022,"startY":-183.8, "startX":3}]} [W3C] 使用參數調用 AppiumDriver.execute():[ "移動:滾動",[{"duration":2,"endY":0.02,"endX":0.022,"startY":-183.8,"startX":3}],"7118f268-78fb-4b3e-91fa- f46f119d6dba"] [HTTP] <-- POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/execute 404 4 ms - 5796 [HTTP] [HTTP] --> POST/wd/hub 7118f268-78fb-4b3e-91fa-f46f119d6dba/element [HTTP] {"using":"id","value":"com.android.deskclock:id/add_alarm_save"} [W3C] 使用參數調用 AppiumDriver.findElement() : ["id","com.android.deskclock:id/add_alarm_save","7118f268-78fb-4b3e-91fa-f46f119d6dba"] [BaseDriver] 此請求的有效定位器策略:xpath、id、類名、可訪問性 id、 -android uiautomator [BaseDriver] 等待 0 毫秒的條件 [AndroidBootstrap] 向 android 發送命令:{"cmd":"action","action":"find","params":{"strategy":"id" ,"selector":"com.android.deskclock:id/add_alarm_save","context":"","multiple":false}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 從客戶端獲取數據:{"cmd" :"action","action":"find","params":{"strategy":"id","selecto r":"com.android.deskclock:id/add_alarm_save","context":"","multiple":false}} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 得到動作類型的命令 [AndroidBootstrap] [BOOTSTRAP LOG ] [debug] 得到命令操作:find [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 使用 'ID' 和 contextId 查找'com.android.deskclock:id/add_alarm_save':'' multiple: false [AndroidBootstrap] [BOOTSTRAP LOG] ] [調試] 使用:UiSelector[INSTANCE=0, RESOURCE_ID=com.android.deskclock:id/add_alarm_save] [AndroidBootstrap] [BOOTSTRAP LOG] [debug] 返回結果:{"status":0,"value":{" ELEMENT":"4"}} [AndroidBootstrap] 從 bootstrap 接收命令結果 [W3C] 使用 driver.findElement() 結果響應客戶端:{"ELEMENT":"4"} [HTTP] <-- POST /wd/hub /session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element 200 28 ms - 87 [HTTP] [HTTP] --> POST /wd/hub/session/7118f268-78fb-4b3e-91fa-9d4f6e單擊 [HTTP] {"id":"4"} [W3C] 使用參數調用 AppiumDriver.click():["4","7118f268-78fb-4b3e-91fa-f46f1 19d6dba"] [AndroidBootstrap] 向 android 發送命令:{"cmd":"action","action":"element:click","params":{"elementId":"4"}} [AndroidBootstrap] [BOOTSTRAP LOG ] [debug] 從客戶端得到數據:{"cmd":"action","action":"element:click","params":{"elementId":"4"}} [AndroidBootstrap] [BOOTSTRAP LOG] [ debug] Got command of type ACTION [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action:點擊[AndroidBootstrap] [BOOTSTRAP LOG] [debug] 返回結果:{"status":0,"value":true} [AndroidBootstrap ] 從引導程序收到的命令結果 [W3C] 使用 driver.click() 結果響應客戶端:true [HTTP] <-- POST /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba/element/4/click 200 355 ms - 76 [HTTP] [HTTP] --> DELETE /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba [HTTP] {} [W3C] 使用參數調用 AppiumDriver.deleteSession():“ 7118f268-78fb-4b3e-91fa-f46f119d6dba"] [BaseDriver] 事件 'quitSessionRequested' 記錄在 1528276671521 (14:47:51 GMT+0530 (India Standard Time)) [App ium] 從我們的主會話列表中刪除會話 7118f268-78fb-4b3e-91fa-f46f119d6dba [AndroidDriver] 正在關閉 Android 驅動程序 [ADB] 正在連接設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C: \\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell am force-stop com.android.deskclock' [ADB] Press the HOME button [ADB] 獲取連接的設備... [ADB] 1 個設備已連接 [ADB] 正在運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell input keyevent 3' [AndroidBootstrap] Sending command to android: {"cmd":"shutdown"} [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"shutdown"} [AndroidBootstrap] Received command result from bootstrap [ UiAutomator] 正在關閉 UiAutomator [UiAutomator] 進入“停止”狀態 [UiAutomator] UiAutomator 正常關閉 [UiAutomator] 進入“停止”狀態 [ADB] 試圖殺死所有 uiautomator 進程 [A] DB] 使用 uiautomator 獲取所有進程 [ADB] 獲取連接的設備... [ADB] 1 個連接的設備 [ADB] 運行 'C:\\Users\\PAKALI\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb .exe -P 5037 -s IFZDSCVCKJUWRSOV shell ps' [ADB] 沒有找到要殺死的 uiautomator 進程,繼續... [UiAutomator] 移動到狀態 'stopped' [Logcat] 停止 logcat 捕獲 [ADB] 正在連接設備... [ ADB] 1 個設備已連接 [ADB] 運行 'C:\\Users{用戶名![應用程序的屏幕截圖] 1 }\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s IFZDSCVCKJUWRSOV shell am force-stop io.appium.unlock' [AndroidDriver] 不清理生成的文件。 如果需要,添加clearSystemFiles功能。 [BaseDriver] 事件 'quitSessionFinished' 記錄在 1528276676716 (14:47:56 GMT+0530 (India Standard Time)) [W3C] 收到響應:null [W3C] 但刪除會話,所以不返回 [W3C] 響應客戶端與驅動程序.deleteSession() 結果:null [HTTP] <-- DELETE /wd/hub/session/7118f268-78fb-4b3e-91fa-f46f119d6dba

200 5196 毫秒 - 76

您正在使用錯誤的庫來執行該操作,js.execute("mobile: scroll") 適用於 iOS。 您需要查看 TouchAction 庫。 這是他們文檔的鏈接http://appium.io/docs/en/writing-running-appium/touch-actions/

我在通過 Appium 在 android 設備上滾動時也遇到了一些問題。
就我而言,主要問題是滾動操作是在我想要滾動的片段准備好之前執行的。

設想:

單擊按鈕打開新片段 -> 從 y 500 滾動到 y 100

解決方案:

單擊按鈕打開新片段 -> 等待已打開片段的元素 A -> 找到元素 A 后從 y 500 滾動到 y 100

滾動代碼(Kotlin):

//wait for some element of the fragment before, then scroll:
PlatformTouchAction(driver as AppiumDriver)
            .press(PointOption.point(100,500))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(200)))
            .moveTo(PointOption.point(100,100)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
            .release()
            .perform()

PlatfromTouchAction 只是一個包裝器,使 TouchAction 在 Kotlin 中可用,如本討論中所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM