androidappium
⑴ 用appium來測試android端的非原生應用可以嗎
可以測試非原生的app,輸入文字直接使用appium的方法即可。
如果想輸入中文,也是能實現的,換個方法就行,github上有開源的工具
⑵ appium能測試android 5.1嗎
可以
接下來我們研究一下測試知乎Android客戶端。自行下載
配置目錄如下:把知乎客戶端命名為hu.apk
編寫基於java testng的測試用例:
由於本人是熟悉selenium webdriver,所以在Android對象識別時,採用的策略和selenium webdriver 類似
怎麼去識別APP的元素的,這里用到Android SDK tools 目錄下的工具uiautomatorviewer ,執行uiautomatorviewer.bat就可
首先解析hu app 拿到其package 和 activity,這里使用appium gui界面,具體操作如圖:
接下來識別APP的元素,比如登陸按鈕,看到resourceId,可以是雨天webdriver的find Element By.id
至於登陸用戶名和密碼,在Android中都是EditText控制項,可以使用By.class
完成對象識別,最終代碼如下:
package com.dbyl.core;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;
import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Hu {
private AndroidDriver driver;
@BeforeMethod(alwaysRun=true)
public void setUp() throws Exception {
// set up appium
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "hu.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
//if no need install don't add this
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.hu.android");
//support Chinese
capabilities.setCapability("unicodeKeyboard" ,"True");
capabilities.setCapability("resetKeyboard", "True");
//no need sign
capabilities.setCapability("noSign", "True");
capabilities.setCapability("appActivity", ".ui.activity.GuideActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@AfterMethod(alwaysRun=true)
public void tearDown() throws Exception {
driver.quit();
}
@Test(groups={"ZHTest"})
public void Login(){
//find login button
WebElement loginButton = driver.findElement(By.id("com.hu.android:id/login"));
loginButton.click();
//wait for 20s
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
//find login userName and password editText
List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
textFieldsList.get(0).sendKeys("[email protected]");
textFieldsList.get(1).sendKeys("cookies123");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
//find ok button byName
driver.findElementByName("OK").click();
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
//find keyword 首頁 and verify it is display
Assert.assertTrue( driver.findElement(By.name("首頁")).isDisplayed());
}
}
接下來就可以debug,首先啟動Android模擬器 ,啟動完畢後再明明很測試,若結果如下:
說明模擬器可以使用
接下來在命令行運行apppium
等待1-2分鍾
run as testng,就能看到自動安裝,登陸知乎
PASSED: Login
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@4474c7fe: 1938 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@1fdf50a3: 121 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@697748ae: 423 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@68450212: 1669 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@7f92deaf: 240 ms
⑶ 怎麼使用appium連接android模擬器
1、Appium連接sdk中的模擬器
了解android的人都在知道,android sdk中自帶AVD Manager(Android Virtual Device Manager).開發者會使用AVD Manager創建一個android模擬器來調試自己的應用。所以首先我們介紹如何讓Appium連接好我們的模擬器
1) 創建一個AVD,並啟動
點擊Create 後填寫相關信息後,點擊OK,選中AVD後點擊Start
2)啟動appium 點擊右上角的啟動按鈕
啟動成功後,如下圖
或者在cmd命令中輸入:appium
2、Appium連接真機
實際開發的過程中我們可能是直接拿真機來調試。所以Appium如何連接真機呢?原理上和上述方式一致。但真機會稍微復雜一點
1)打開手機的USB調試模式
不同的手機打開調試模式的方式不同。一般都在設置中的開發者模式中打開
2)手機連接電腦
使用數據線連接手機與電腦,然後在cmd中輸入adb devices查看是否連接成功
新手可能會出現兩個問題
一是輸入adb命令時提示不是內部命令或者外部命令
那麼你需要下載一個adb工具包並存放在C:\Windows\System32目錄下(必須強調:與sdk中的adb工具包版本一致!!!!)
二是需要打開手機的usb調試模式並安裝好驅動
之後在cmd中輸入adb devices 提示如下圖則成功
3)啟動appium服務
在cmd命令中輸入:appium
啟動成功
3、Appium連接第三方模擬器
有時候我們可能不太想用真機或者android sdk中自帶的模擬器。而是使用一些三方的android模擬器。例如夜神,逍遙等等
理論上來說可以使用連接真機的方式一樣來嘗試連接。以下案例使用逍遙模擬器來做演示
1)使用adb連接到逍遙模擬器
網上網路了一番後,發現逍遙模擬器的連接方式是:adb connect 127.0.0.1:21503
所以其udid就是127.0.0.1:21503
2)連接到appium 服務
在cmd命令中輸入:appium
啟動成功
⑷ APP自動化測試appium環境怎麼搭建
APP自動化測試appium環境怎麼搭建?1
/12
下載安裝node.js (注意操作系統,32位,64位)。安裝完成後,檢查是否安裝成功:cmd, 輸入node -v , 顯示安裝版本信息,則安裝成功,如下圖所示:
2
/12
安裝JDK配置環境變數
JDK安裝,以及環境變數設置
下載eclipse (注意操作系統,32位,64位),Mars版。
3
/12
配置Android SDK環境
下載Android SDK,下載地址www.androiddevtools.cn,如下圖所示:
4
/12
安裝保證Level 17或以上版本 api,如下圖所示:
5
/12
Android操作系統選擇安裝用於模擬機,如下圖所示:
6
/12
配置環境變數
a>新增變數:ANDROID_HOME,設置值為安裝目錄: l例如 E:\android-sdk
b>Path中新增參數:%ANDROID_HOME%\tools; %ANDROID_HOME%\platform-tools
7
/12
驗證是否安裝配置成功
cmd: 輸入 android, 彈出SDK Manager窗口。
8
/12
ADT安裝
打開eclipse,help>install new software, 輸入https://dl-ssl.google.com/android/eclipse
下載時間會比較久,也可以考慮直接下載後本地安裝,如下圖所示:
9
/12
安裝完成,重啟Eclipse,如下圖所示:
10
/12
安裝Appium,下載: http://appium.io,如下圖所示:
11
/12
設置環境變數
Appium目錄和他的bin目錄都加入環境變數PATH:例如
APPIUM_HOME: E:\App\Appium
Path: %APPIUM_HOME%\node_moles\.bin
12
/12
運行appium-doctor來驗證Appium的所有依賴是否配置正確。
⑸ Appium超時錯誤連接到驅動程序時問題,怎麼解決
問題
1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress
之前的會話沒有關閉,然後你又運行了測試實例,也沒有設置覆蓋.
解決:
1.重新停止appium服務,開啟Appium服務
2.在Genarel Setting那裡設置覆蓋Session,重啟Appium
測試結束在AfterClass加driver.quit()
2. error: Failed to start an Appium session, err was: Error: Command failed: C:Windowssystem32cmd.exe /s /c "D:android-sdk-windowsplatform-toolsadb.exe -s adb server version (32) doesn't match this client (36); killing…
wait-for-device"
error: could not installsmartsocketlistener: cannot bind to 127.0.0.1:5037:
沒有鏈接上手機或者模擬器,請確認已經連接成功,重新鏈接
3. error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device.
手機系統低於4.2,appium不支持4.2.2以下的系統,請換一個手機或者模擬器來測試。
4. Error: Permission to start activity denied.
**activity在清單文件裡面沒添加Android:exported="true"的話,你不能直接打開對應的activity,需要從啟動頁activity打開。
exported屬性就是設置是否允許activity被其它程序調用**
5. error: Failed to start an Appium session, err was: Error: Activity used to start app doesn't exist or cannot ve launched! Make usre it exists and is launchable activity
要打開的activity不存在,activity路徑錯誤,改為完整正確的activity路徑
6. error: Failed to start an Appium session, err was: Error: 'java - version' failed. Error: Command failed: C:Windowssystem32cmd.exe /s /c "java -version"
Java版本錯誤,請安裝最新的版本。
7.> info: [debug] Error: Command failed: C:Windowssystem32cmd.exe /s /c "D:android-sdk-windowsplatform-toolsadb.exe -s 8806a0b0 shell "echo 'ready'"error: unknown host service
鏈接手機失敗,重新鏈接手機即可,我就是重新拔插了一下usb
Error: Command failed: C:Windowssystem32cmd.exe /s /c "D:android-sdk-windowsplatform-toolsadb.exe -s 8806a0b0 shell "echo 'ping'""
error: unknown host service
adb被突然佔用導致,例如你在運行用例的時候運行了模擬器。
8. UIAutomatorViewer提示: Unable to connect to adb. Check if adb is installed correctly
解決,sdk升級到了25產生的問題。
解決方法:
將adb.exe復制一份到uiautomatorviewer.bat目錄下
修改uiautomatorviewer.bat文件最後一行(改binddir=%prog_dir%為自己的platform-tools本地路徑)
- //設置自動化相關參數
- DesiredCapabilities capabilities = new DesiredCapabilities();
- capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
- capabilities.setCapability("automationName","Appium");
- capabilities.setCapability("platformName", "Android");
- capabilities.setCapability("deviceName", "Pixel_XL_API_25");// Galaxy_Nexus_API_25
- capabilities.setCapability("noReset", true);
- capabilities.setCapability("avdReadyTimeout", 300000);
- capabilities.setCapability("sessionOverride", true);
- //設置安卓系統版本
- capabilities.setCapability("platformVersion", "7.1.1");
- //設置apk路徑
- capabilities.setCapability("app", app.getAbsolutePath());
- //設置app的主包名和主類名
- capabilities.setCapability("appPackage", "com.example.android.contactmanager");
- capabilities.setCapability("appActivity", ".ContactManager");
- //初始化
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
- driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
- }
- @Test
- public void addContact(){
- WebElement el = driver.findElement(By.name("Add Contact"));
- el.click();
- List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
- textFieldsList.get(0).sendKeys("feimaoyuzhubaobao");
- textFieldsList.get(2).sendKeys("forever together");
- driver.swipe(100, 500, 100, 100, 2);
- driver.findElementByName("Save").click();
- }
- @After
- public void tearDown() throws Exception {
- driver.quit();
- }
找到appium的安裝目錄下的adb.js文件,windows版本的目錄如下:Appium ode_molesappium ode_molesappium-adblib
2、打開adb.js,手動修改該文件下的內容,此方法我已經試驗成功。網上還有如下的修改解決辦法:以下我未試驗。
ADB.prototype.getPIDsByName = function (name, cb) {
logger.debug("Getting all processes with '" + name + "'");
this.shell("ps '" + name + "'", function (err, stdout) {
if (err) return cb(err);
stdout = stdout.trim();
var procs = [];
var outlines = stdout.split(" ");
outlines.shift(); //在該處添加此行代碼
3、重啟appium
9 error: Failed to start an Appium session, err was:INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling
When you are at final step to execute test automation script for mobile app testing on a mobile emulator or a virtual device or a real device, you might observe that script execution fails with different kinds of errors, In context to current article you will look at the error and solutions for: INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.
Error in Appium Server:
1
2
3
4
5
6
7
8
Error: Command failed: C:Windowssystem32cmd.exe /s /c
"C:Users{User}-toolsadb.exe -s
emulator-5554 install
"C:Program Files (x86)Appium ode_molesappiumuildsettings_apksettings_apk-debug.apk""
> Failed to install C:Program Files (x86)Appium ode_molesappiumuildsettings_apk
settings_apk-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install
io.appium.settings without first uninstalling.]
Error in Android studio run console:
1
2
3
4
5
6
7
8
9
org.openqa.selenium.SessionNotCreatedException: A new session could not be created.
(Original error: Command failed: C:Windowssystem32cmd.exe /s /c
"C:Users{User}-toolsadb.exe -s emulator-5554 install
"C:Program Files (x86)Appium ode_molesappiumuildsettings_apksettings_apk-debug.apk""
Failed to install C:Program Files (x86)Appium ode_molesappiumuildsettings_apk
settings_apk-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install
io.appium.settings without first uninstalling.]
) (WARNING: The server did not provide any stacktrace information)
Command ration or timeout: 0 milliseconds
For the first time when you execute the script itmight pass, but it will fail with above error when you try to execute the same or any other script multiple times. Or when your test script execution fails on the first attempt for some other reason, and when you fix it and execute it again, you might encounter this new issue.
原因:
The reason for this error is that Appium installs 2 mobile applications before executing the script.
1. io.appium.settings
2. io.appium.unlock
Theseare the supportive mobile applications appium utilizes to execute the test automation script in Mobile Emulator or virtual device or a real mobile device.
Ideally Appium should remove these files every time at the end of the script execution or termination, if it is intends to install themevery time a script is executed, or it should conditionally install these apps / apksto the mobile emulator or mobile device.
In your mobile emulator / Virtual Device / Real device, the 2 mobile applications appear as below:
There are multiple ways to troubleshootthis error and go ahead for asuccessful test script execution.
解決辦法
Solution 1: ADB's uninstall command to remove the files.
You can open command prompt, assuming that you already had set the environment variables for ANDROID_HOME and Path variables for sdk tools and platform tools.
And execute commands as shown below:
Solution 2: Uninstall manually
You can open the mobile emulator / virtual device / real device and go to apps and uninstall them.
Solution 3: Write code as part of your test automation script.
As part of your selenium test automation script, you could write instructions to execute the commands provided in solution 1 above, so that this issue would not arise.
Hope this article has been helpful and you are able to proceed further with script execution.
Request to kindly share any of your queries in form of comments, we would try our best to provide any solution for you.
10.出錯信息里含有"ps 'uiautomator',具體信息未 A new session could not be created. (Original error: Command failed: C:Windowssystem32cmd.exe /s /c "C:Userssxie-toolsadb.exe -s emulator-5554 shell "ps 'uiautomator'""
android-appium: A new session could not be created
junitexceptionandroidappium自動化
detail log:
org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Command failed: C:Windowssystem32cmd.exe /s /c "C:Userssxie-toolsadb.exe -s emulator-5554 shell "ps 'uiautomator'""
) (WARNING: The server did not provide any stacktrace information)
Command ration or timeout: 0 milliseconds
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'WL00070299', ip: '10.110.12.39', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_40'
Driver info: driver.version: AndroidDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect..newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
at io.appium.java_client.remote.AppiumProtocolHandShake.createSession(AppiumProtocolHandShake.java:161)
at io.appium.java_client.remote.AppiumProtocolHandShake.createSession(AppiumProtocolHandShake.java:76)
at io.appium.java_client.remote.AppiumCommandExecutor.doExecute(AppiumCommandExecutor.java:111)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:162)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:137)
at io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:38)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:88)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:112)
at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:73)
at com.sky.demo.ContactTest.setUp(ContactTest.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schele(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
==========================================
直接在cmd中執行"C:Windowssystem32cmd.exe /s /c "C:Userssxie-toolsadb.exe -s emulator-5554 shell "ps 'uiautomator'""
bad pid 'uiautomator'", 報錯: bad pid 'uiautomator'
代碼內容為
public class ContactTest {
private AndroidDriver driver;
@Before
public void setUp() throws Exception {
//設置apk的路徑
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "ContactManager.apk");
}
解決辦法:
resolved by this way:
adb.js(C:Program Files (x86)Appium
ode_molesappium
ode_molesappium-adblibadb.js) 中1035 行this.shell("ps '" + name + "'", function (err, stdout) {
對應執行的指令是ps 'uiautomator', Android7不支持這個指令格式,所以執行結果是bad pid 'uiautomator'
目前Appium未對此進行處理,所以需要修改此指令的執行方式
即將
this.shell("ps '" + name + "'", function (err, stdout) {
if (err) return cb(err);
替換成
this.shell_grep("ps", name, function (err, stdout) {
if (err) {
logger.debug("No matching processes found");
return cb(null, []);
}
並增加上面用到的shell_grep函數:
ADB.prototype.shell_grep = function (cmd, grep, cb) {
if (cmd.indexOf('"') === -1) {
cmd = '"' + cmd + '"';
}
var execCmd = 'shell ' + cmd + '| grep ' + grep;
this.exec(execCmd, cb);
};
11.Android 7.0系統的手機無法執行appium腳本的問題
AppiumAppium 版本 1.4.16,Android 設備固件 7.x,執行腳本時,報錯使用語言:python報錯如下:
WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"])
這個是因為appium版本1.4.16使用的uiatumator1.0不支持的原因導致?如果不升級appium版本,是否有解決方案?
解決辦法
uiautomator1.0應該是不支持7.0,不升版本就換用uiautomator2.0吧,或者用下面的改腳本的方法使用。
解決Android 7.0系統的手機無法執行appium腳本的問題,改問題的具體解決方法如下:
adb.js 中1035 行this.shell("ps '" + name + "'", function (err, stdout) {
對應執行的指令是ps 'uiautomator', Android7不支持這個指令格式,所以執行結果是bad pid 'uiautomator'
目前Appium未對此進行處理,所以需要修改此指令的執行方式
即將
this.shell("ps '" + name + "'", function (err, stdout) {
if (err) return cb(err);
替換成
this.shell_grep("ps", name, function (err, stdout) {
if (err) {
logger.debug("No matching processes found");
return cb(null, []);
}
並增加上面用到的shell_grep函數:
ADB.prototype.shell_grep = function (cmd, grep, cb) {
if (cmd.indexOf('"') === -1) {
cmd = '"' + cmd + '"';
}
var execCmd = 'shell ' + cmd + '| grep ' + grep;
this.exec(execCmd, cb);
};
技巧
1.每次測試都重新安裝app
為capabilities色設置noReset為true
capabilities.setCapability("noReset", true);
2.中文亂碼
這都是編碼問題:
1.方法1:
Android Studio修改文件編碼的方法,最底部的UTf-8,點擊選GBK就可以了,reload文件。(ps:先把文件內容全選復制一下再轉換編碼,再粘貼,不然文件內容就變亂碼了)
2.方法2:
用的是原來的UTF-8編碼,然後在測試mole的build.gradle裡面添加三行代碼
tasks.withType(JavaCompile){
options.encoding = 'UTF-8'
}
3.清除編輯框EditText內容
這個問題好像是看手機系統的,我之前的手機就會出現sendKeys的時候沒有全選去掉本來的內容,現在都會自動全選覆蓋了,這個也不算問題了。
/**
* 逐字刪除編輯框中的文字
* @param element 文本框架控制項
*/
public void clearText(AndroidElement element){
String className = element.getClass().getSimpleName();
if (className.equals("EditText")){
String text = element.getText();
//跳到最後
driver.pressKeyCode(KEYCODE_MOVE_END);
for (int i = 0; i < text.length(); i ++){
//循環後退刪除
driver.pressKeyCode(BACKSPACE);
}
}else {
print("不是文本輸入框架,無法刪除文字");
}
}
1
4.點擊輸入法鍵盤的回車搜索
方法1:切換輸入法
利用adb命令先切換為自己的輸入法,按了搜索再切換為appium的輸入法
查看當前手機的輸入法
cmd執行下面的的代碼
adb shell ime list -s
可以看到類似下面的結果,
C:UsersLITP>adb shell ime list -s
com..input_mi/.ImeService
com.sohu.inputmethod.sogou.xiaomi/.SogouIME
io.appium.android.ime/.UnicodeIME
C:UsersLITP>
執行adb命令
先寫好一個執行cmd的方法
/**
* 執行adb命令
* @param s 要執行的命令
*/
private void excuteAdbShell(String s) {
Runtime runtime=Runtime.getRuntime();
try{
runtime.exec(s);
}catch(Exception e){
print("執行命令:"+s+"出錯");
}
}
在需要搜索的時候執行下面的代碼,切換的輸入法用自己查看列表的輸入法內容,我這里是搜狗輸入法
//使用adb shell 切換輸入法-更改為搜狗拼音,這個看你本來用的什麼輸入法
excuteAdbShell("adb shell ime set com.sohu.inputmethod.sogou.xiaomi/.SogouIME");
//再次點擊輸入框,調取鍵盤,軟鍵盤被成功調出
clickView(page.getSearch());
//點擊右下角的搜索,即ENTER鍵
pressKeyCode(AndroidKeyCode.ENTER);
//再次切回 輸入法鍵盤為Appium unicodeKeyboard
excuteAdbShell("adb shell ime set io.appium.android.ime/.UnicodeIME");
⑹ appium 不支持android 8.0嗎
Appium 支持Android也支持iOS,但是兩者還有很大的區別,我使用Appium一個多月,剛開始是Android,後面才用iOS,所以做iOS自動化的時候比Android艱難多了,後來才發現這兩個的模式有一定的差別。(當然可能是我Mac的基礎太差)就以我在理解淺顯的描述下兩者的區別。Appium Android 工作模式(如下經驗僅僅是我在windows上的經驗,mac上只用了ios,如有說錯,請大家指正):
過程大概如下:
1. Android設備已經開啟(包括真機和模擬器,真機已經連接上電腦,當然驅動少不了。。。)
2. Appium 打開(命令行打開的同時Appium server也同時開啟了)
3. Appium啟動時連接Android設備,這里不做任何設置(什麼app,瀏覽器,API版本。。。,IP和埠還是需要設置的)就可以成功開啟Appium
Appium Server啟動直接連接設備。
自動化用例執行時連接上Appium server,才告訴Appium我要測什麼app。。。之類的caps
Appium iOS 工作模式:
iOS 和 Android不同,模擬器和真機有區別,我分開說
iOS模擬器過程如下:
1. 打開Appium (命令行直接執行Appium就算是啟動了,GUI的可能還需要點擊launch)
2. 啟動Appium server 除了設置IP和埠,別的也不需要設置(命令行打開的時候就帶了IP和埠的參數)
Appium Server開啟時不連接任何模擬器,執行用例是才按照caps 開啟對應的模擬器和安裝app
iOS真機:
1. 真機連接上電腦
2. Appium打開 (命令行直接執行Appium就算是啟動了,真機需要-u 參數設置真機UUID,GUI的可能還需要點擊launch)
3. 啟動Appium server 除了設置IP和埠(命令行打開的時候就帶了IP和埠的參數),需要設置真機的UUID(當然還有其他關聯caps也需要設置),Appium啟動時需要連接真機
那麼問題來了(別想歪了,不是blue shit。。。)
開啟Appium server的時候什麼設置都不要,那GUI裡面的那麼多設置都是干什麼用的?(什麼app,瀏覽器,API版本。。。)
答案就是Inspector用的,Inspector 就和你執行用例一樣的,需要告訴server你的caps都是什麼。
Android SDK有工具可以用來識別UI的,UIAutomationView,在SDK的目錄下, 所以Appium Android inspector的可以不要。
iOS SDK不知道是否有類似的工具,所以我還是用Appium的Inspector來抓對象。
以上都是個人經驗,如有錯誤,望大家一起探討。
⑺ 怎樣使用Appium進行Android自動化測試
1、確定你的appium均安裝完畢,且環境變數設置完畢,可以通過cmd命令行:appium-doctor中確定2、真機開啟了usb調試模式,通過命令行執行:appium-a127.0.0.1-p4723-UN2F4C15A30001571--no-reset,其中-u後面的部分是手機的devices。來建立手機端和appium伺服器的連接3、在初始化程序設置一些運行時的狀態,如appium版本,手機版本,型號,系統類型。設置待測試的apppackagename和activityname4、初始化成功,使用使用當前的driver去定位元素,執行sendkeys或者click操作,實現app端自動化ps:初次執行環境問題解決比較麻煩
⑻ windows下appium啟動android摹擬器時怎樣配置setting
1)安裝JDK,並進行環境變數配置
JDK安裝很簡單,按默認安裝即可。
環境變數配置:
添加JAVA_HOME變數, 值:Jdk的安裝路徑,如:D:\Java\jdk1.7.0_45
添加CLASSPATH變數,值 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
修改path變數,加上這句 %JAVA_HOME%\bin;
檢查JAVA環境是否配置好,進入CMD命令行,輸入java或javac,可以看到好多的命令提示,說明成功了。
2)安裝Node.js,按默認安裝即可,可以改變安裝的路徑。
安裝完成以後,檢查Node版本安裝是否成功:進入CMD,輸入node -v, 可以看到版本號,說明成功了。
3)安裝ADT,配置環境變數
下載 adt-bundle-windows-x86-20140321.zip,直接解壓即可。
配置環境變數,設置ANDROID_HOME 系統變數為你的 Android SDK 路徑,並把tools和platform-tools兩個目錄加入到系統的 Path路徑里。
變數名:ANDROID_HOME 值: D:\AutoTest\adt\sdk
設置Path值: %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
4)聯網安裝Appium
進入cmd命令行,輸入:
npm install –g appium 或者
npm --registryhttp /registry cnpmj .orginstall -g appium
註:-g全局參數
多等幾分鍾,可以看到appium的版本1.1.0及安裝目錄
5)檢查一下appium是否安裝成功。
進入cmd命令行,輸入appium
提示:socket.io started 說明安裝好了。
6)檢查appium所需的環境是否OK(這步很重要)
進入Cmd命令行,輸入appium-doctor ,出現以下提示,All Checks were successful ,說明環境成功。
7)安裝Apache Ant (這一步可省)
安裝Apache Ant 。解壓縮文件夾,並把路徑加入環境變數。
變數: ANT_HOME 值: D:\AutoTest\ant-1.9.4
設置Path: %ANT_HOME%\bin;
測試Ant是否安裝成功,進入cmd命令行:輸入ANT,如果沒有指定build.xml就會輸出:Buildfile: build.xml does notexist! Build failed
8)安裝Apache Maven (這一步可省)
下載Maven ,並解壓縮文件夾,把路徑加入環境變數。
變數M2_HOME 值:D:\AutoTest\maven-3.1.1
設置Path: %M2_HOME%\bin;
測試Maven是否成功,運行cmd,輸入mvn -version如果成功,則出現maven版本等環境信息。
安裝:python+webdriver環境
第一步:安裝active-python,雙擊可執行文件,直接默認安裝即可。
第二步:安裝selenium webdriver
1. 打開cmd
2.
3. 打開python的shell或者IDEL界面 ,輸入from selenium import webdriver 如果不報錯那就說明你已經安裝selenium for python成功了。
4. 安裝appium-python-client:(這步很重要,必須)
進入cmd,輸入:pip install Appium-Python-Client
以上全部安裝好以後,最後就是執行實例來測試一下:
1. 打開Adt,創建一個模擬器,並啟動android模擬器。
2. 在cmd啟動appium
輸入:appium
3. 另開一個cmd終端窗口。切換到實例代碼路徑下,執行android_contacts.py文件。
⑼ appium中怎麼連接android真機測試
啟動appium,執行testng測試腳本,腳本啟動配置項如下:
import io.appium.java_client.AppiumDriver;import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");//這句不是必須的
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");
AppiumDriver driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap