最近在寫android app自動化測試時,發現輸入和清除操作耗費時間比較長,下面我用了不同的方法進行輸入和清除操作,對比下時間(選取測試的一組數據做分析),選出最佳方法。
1、輸入操作
1.1、webElement.sendKeys()
可以看到 該方法的輸入時間在5s 左右
1.2、actions.sendKeys().perform()
該方法是使用Actions類的sendKeys方法,sendKeys前需要先webElement.click()
從結果可以看到該方法的輸入時間在3s左右
1.3、adb shell input text
該方法是直接使用adb命令進行輸入,可以看出輸入時間不到1s. 操作前需要先webElement.click()
1.4、總結
方法 | 第一次 | 第二次 | 第三次 | 第四次 | 解釋 | 結果 |
---|---|---|---|---|---|---|
webElement.sendKeys() | 5112 | 5444 | 17045 | 5380 | 第三次默認進行了清除操作 | IOS、android 通用,用時最長 |
actions.sendKeys().perform() | 5747 | 3203 | 3298 | 3757 | 第一次較長是等待元素可以點擊 | iOS、android通用,用時較長 |
adb shell input text | 3999 | 948 | 947 | 891 | 第一次較長是等待元素可以點擊 | 只用於android,時間最短 |
2、清除操作
2.1、webElement.clear()
該方法在需要清除的元素沒有內容時,耗費時間較長,在5s左右。清除元素有內容時時間在1s左右。如果是密碼輸入框,有幾率出現清除不干凈。
2.2、adb shell input keyevent 67
該方法直接使用adb命令刪除,代碼如下:
webElement.click String conent = webElement.getText(); while (StringUtils.isNotBlank(conent)) { ShellUtils.adbClear();---封裝執行adb命令的方法 conent = webElement.getText(); }
從圖可以看出,該刪除方法耗時依賴於元素的長度,比如如果是手機號碼,則刪除要耗時十幾秒。注意:如果是密碼輸入框,則不會進行清除。
2.3、pressKeyCode
該方法是 點擊–全選–刪除,代碼
webElement.click ((AndroidDriver<WebElement>) driver).pressKeyCode(29, 28672); ((AndroidDriver<WebElement>) driver).pressKeyCode(112)
該方法刪除時間穩定在1.3左右
2.4、總結
方法 | 第一次 | 第二次 | 第三次 | 第四次 | 解釋 | 結果 |
---|---|---|---|---|---|---|
webElement.clear() | 146 | 5238 | 1198 | 4037 | 第一次判斷了text為空,所以沒有進行清除操作,第二次和第四次是密碼輸入框獲取到text為空的原因。 | IOS、android 通用,密碼輸入框用時較長 |
adb shell input keyevent 67 | 3239 | 723 | 11353 | 780 | 第一次較長是等待元素可以點擊,第三次是要清楚的文案太長 | 只用於android,依賴文本長度,且密碼輸入框不能清除 |
pressKeyCode | 3282 | 845 | 1288 | 1388 | 第一次較長是等待元素可以點擊 | 只用於android,時間最短 |
3、結果
輸入最終代碼如下
case "sendKeys": webElement.click(); if (StringUtils.isNotEmpty(webElement.getText()) || Boolean.valueOf(webElement.getAttribute("password"))) { //如果元素內容不為空或者是密碼輸入框,則先進行刪除操作。pressKeyCode刪除 ((AndroidDriver<WebElement>) driver).pressKeyCode(29, 28672); ((AndroidDriver<WebElement>) driver).pressKeyCode(112); } ShellUtils.adbSendKeys(elementLocator.getActionValue());---adb 命令輸入 break;