appium为什么要用appium webdriverr

appium的log日志中的中文乱码问题应该如何解决?
在junit中用xpath去定位元素,运行时却报错:org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)&br&Command duration or timeout: 247 milliseconds&br&Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83ca0', time: ' 09:43:55'&br&System info: host: 'SheroHuo-PC', ip: '192.168.1.103', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_05'&br&Driver info: io.appium.java_client.android.AndroidDriver&br&Capabilities [{appPackage=com.sankuai.meituan, networkConnectionEnabled=true, warnings={}, appWaitActivity=com.sankuai.meituan.activity.Welcome, appWaitPackage=com.sankuai.meituan, databaseEnabled=false, deviceName=Nexu_4, ignoreUnimportantViews=true, platform=LINUX, appActivity=com.sankuai.meituan.activity.Welcome, desired={appActivity=com.sankuai.meituan.activity.Welcome, appPackage=com.sankuai.meituan, appWaitActivity=com.sankuai.meituan.activity.Welcome, appWaitPackage=com.sankuai.meituan, platformName=Android, deviceName=Nexu_4, ignoreUnimportantViews=true}, platformVersion=4.1, webStorageEnabled=false, locationContextEnabled=false, browserName=Android, takesScreenshot=true, javascriptEnabled=true, platformName=Android}]&br&Session ID: c676624d-ed09-4a93-b9ad-f5&br& at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&br& at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)&br& at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)&br& at java.lang.reflect.Constructor.newInstance(Unknown Source)&br& at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)&br& at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)&br& at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)&br& at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:180)&br& at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352)&br& at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:449)&br& at org.openqa.selenium.By$ByXPath.findElement(By.java:357)&br& at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)&br& at meituan.MT_Login.test(MT_Login.java:45)&br& at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&br& at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)&br& at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)&br& at java.lang.reflect.Method.invoke(Unknown Source)&br& at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)&br& at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)&br& at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)&br& at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)&br& at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)&br& at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)&br& at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)&br& at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)&br& at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)&br& at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)&br& at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)&br& at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)&br& at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)&br& at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)&br& at org.junit.runners.ParentRunner.run(ParentRunner.java:363)&br& at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)&br& at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)&br& at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)&br& at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)&br& at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)&br& at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)&br&查看appium的log日志:&br&&img src=&/ca29cb76ba2b1b2fae2a_b.jpg& data-rawwidth=&854& data-rawheight=&272& class=&origin_image zh-lightbox-thumb& width=&854& data-original=&/ca29cb76ba2b1b2fae2a_r.jpg&&&br&在xpath中的中文编程乱码
在junit中用xpath去定位元素,运行时却报错:org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)Command duration or timeout: 247 millisecondsBuild info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83ca0', time: ' 09:43:55'System info: host: 'SheroHuo-PC', ip: '192.168.1.103', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_05'Driver info: io.appium.java_client.android.AndroidDriverCapabilities [{appPackage=com.sankuai.meituan, networkConnectionEnabled=true, warnings={}, appWaitActivity=com.sankuai.meituan.activity.Welcome, appWaitPackage=com.sankuai.meituan, databaseEnabled=false, deviceName=Nexu_4, ignoreUnimportantViews=true, platform=LINUX, appActivity=com.sankuai.meituan.activity.Welcome, desired={appActivity=com.sankuai.meituan.activity.Welcome, appPackage=com.sankuai.meituan, appWaitActivity=com.sankuai.meituan.activity.Welcome, appWaitPackage=com.sankuai.meituan, platformName=Android, deviceName=Nexu_4, ignoreUnimportantViews=true}, platformVersion=4.1, webStorageEnabled=false, locationContextEnabled=false, browserName=Android, takesScreenshot=true, javascriptEnabled=true, platformName=Android}]Session ID: c676624d-ed09-4a93-b9ad-f5 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)…
本次问题主要在于java源文件的编码格式不是utf-8的格式。将ava源文件的编码格式改为utf-8之后,就可以了了。
已有帐号?
无法登录?
社交帐号登录appium是一个开源框架,相对来说还不算很稳定。转载请注明出处!!!!
前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:
接下来我们研究一下测试知乎Android客户端。自行下载
配置目录如下:把知乎客户端命名为zhihu.apk
编写基于java testng的测试用例:
由于本人是熟悉selenium webdriver,所以在Android对象识别时,采用的策略和selenium webdriver 类似
怎么去识别APP的元素的,这里用到Android SDK &tools 目录下的工具uiautomatorviewer ,执行uiautomatorviewer.bat就可
首先解析zhihu app 拿到其package 和 activity,这里使用appium gui界面,具体操作如图:
接下来识别APP的元素,比如登陆按钮,看到resourceId,可以是雨天webdriver的find Element By.id
至于登陆用户名和密码,在Android中都是EditText控件,可以使用By.class
完成对象识别,最终代码如下:
package com.dbyl.
import org.openqa.selenium.By;
import org.openqa.selenium.WebE
import org.openqa.selenium.remote.CapabilityT
import org.openqa.selenium.remote.DesiredC
import org.testng.A
import org.testng.annotations.AfterM
import org.testng.annotations.BeforeM
import org.testng.annotations.T
import io.appium.java_client.android.AndroidD
import java.io.F
import java.net.URL;
import java.util.L
import java.util.concurrent.TimeU
public class zhiHu {
@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, "zhihu.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.zhihu.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.zhihu.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("");
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 suiteTotal 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@69 ms[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@7f92deaf: 240 ms
阅读(...) 评论()appium自动化学习(一)
appium自动化学习(一)
hello world!
  现在做Android移动app测试,想把自动化学起来,经过一番折腾,最终定位appium。脚本语言选择python。把学习的过程写下来,一方面为了记忆,回顾。另外还能对增加学习动力。
  环境搭建就不先不说了。我查考的testerhome上的一篇教程。环境搭建好后,开始自己第一个测试脚本。边学边写......
  1.按照教程中的代码结合现有的情况,做第一个可以运行的脚本
1 import os
2 from selenium import webdriver
3 import time
5 PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
9 desired_caps = {}
10 desired_caps['deviceName'] = 'BY2QUX'#通过adb devices -l查看设备标识
11 desired_caps['platformName'] = 'Android'
12 desired_caps['browserName'] = ''
13 desired_caps['platformVersion'] = '4.4.2'
14 #desired_caps['app'] = PATH(r'C:\Users\mazhigang\Desktop\AndroidStorm.apk')#这里手动把app装到手机里,就注释点即可,如果打开,会根据路径安装app
15 desired_caps['appPackage'] = 'com.storm.smart'#app的包名,具体这块还不是很了解
16 desired_caps['appActivity'] = '.LogoActivity'#打开应用的第一个Activity,具体不了解
18 driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) #连接设备并打开应用
20 time.sleep(15)
21 driver.find_element_by_id('com.storm.smart:id/web_page_head_local').click()#点击所定位的元素
  通过上面的脚本,可以实现连接设备,打开指定的应用,点击一个按钮。
  真是凡事开头难,做到这一步已经用了很长时间,遇到不少问题。接下来要学习定位元素。
参考文献:/topics/646
如果您想提高自己的技术水平,认识同行朋友、开拓技术视野,请加入QQ群:
Powered by
& 2014 &&&联系本站:appium安装_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
appium安装
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
你可能喜欢appium为什么要用webdriver_百度知道
appium为什么要用webdriver
IOS应用的相关基础知识(包括Activity等的基本概念)———– Activity的问题TesterHome里问的人有很多,这是必备的)2,调试真机的时候.Python&#47.安卓/Java等语言基础(很重要.一些SDK包中常用的调试命令和技巧 (最起码能简单搭建起模拟器什么的,见下文。3,别忘了打开USB调试模式1
其他类似问题
为您推荐:
其他1条回答
S架构。用申请的帐户登录在线客服系统,必须先向在线客服系统申请一个帐户,B&#47在线客服系统是一种网页版即时通讯软件的统称,然后把这段代码嵌入到网站网页当中,这才是真正的在线客服系统,就可以开始用了,就是一段代码,然后生成网页标签,上网的地方就能用,在线客服系统共有的一个特点是:网站的所有者想要使用在线客服系统。在线客服系统:乐盈通在线客服系统
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 appium webdriverwait 的文章

 

随机推荐