#11 楼 @hudiefeifei 你在这一句前后都加个 log :
driver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
看看是否前后的 log 都能打印出来?
Genymotion 本身也有这个选项:
把最下面的 use virtual keyboard for text input 勾上就行了。只是这个选项必须在模拟器开机前选择,不能运行中更改,没那么方便。
只有一个 status 不停出现这个是 appium.app 本身的正常现象,只要选的 platform 是 iOS 都会有。(目前还没探究具体原因,估计应该是 GUI 界面向 server 发心跳包确认 server 是否还存活吧,我用命令行启动 appium 的话不会有这些 log )
这个 log 和实际执行没有半毛钱关系。。。
另外,你能在 setUp 那里打个断点或者打印一个 log 吗?现在这么看貌似 Junit 的这个用例根本没执行。
This class is deprecated.
It is no longer necessary to extend UiAutomatorTestCase. You can use getInstance(Instrumentation) from any test class as long as you have access to an Instrumentation instance.
http://developer.android.com/reference/android/support/test/uiautomator/UiAutomatorTestCase.html
官方的新例子:
import android.test.InstrumentationTestCase;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.By;
public class CalculatorUiTest extends InstrumentationTestCase {
private UiDevice mDevice;
public void setUp() {
// Initialize UiDevice instance
mDevice = UiDevice.getInstance(getInstrumentation());
// Start from the home screen
mDevice.pressHome();
mDevice.wait(Until.hasObject(By.pkg(getHomeScreenPackage()).depth(0)),
}
}
试下装个最新的 homebrew ?
网上有人说 brew 版本太老也不行,不兼容新的 ideviceinstaller 自动安装脚本。
另外,麻烦添加一下头像,谢谢。
额,出错原因是你的 setUp 第二次执行时开不了 session 。
你以为的执行顺序是:
setUp->Test001->Test002
实际执行顺序是:
setUp->Test001->setUp->Test002
解决方法:
setUp
改名为 setUpBeforeClass
, tearDown
改为 tearDownAfterClass
(如果有)driver.quit()
)使用单元测试框架(如 Junit)前最好先了解一下它的一些基本概念吧。例如 Junit 的 setUp 和 tearDown :http://etutorials.org/Programming/Java+extreme+programming/Chapter+4.+JUnit/4.6+Set+Up+and+Tear+Down/
appium/build/settings_apk/settings_apk-debug.apk
appium/build/settings_apk/settings_apk-debug.apk
appium/lib/devices/android/android-common.js
和 appium-adb 的 appium-adb/lib/adb.js
)建议先用方案一,稳定后再做方案二的后两步吧。主要的重点难点都在 apk 和 adb 命令那里。
appium 设定 network 是通过 settings.apk 设定的,它的项目地址是 https://github.com/appium/io.appium.settings
虽然要求有点高,但如果你懂得基本的 android app 开发的话可以把它写到这个 app 里。
相关的文章http://blog.csdn.net/stevenhu_223/article/details/9052083
我去看了下 Java 客户端的 setNetworkConnection
的用法
public void networkConnectionTest() {
NetworkConnectionSetting networkConnection = new NetworkConnectionSetting(false, true, true);
networkConnection.setData(false);
networkConnection.setWifi(false);
driver.setNetworkConnection(networkConnection);
networkConnection = driver.getNetworkConnection();
assertEquals(new NetworkConnectionSetting(false, false, false), networkConnection);
}
用起来和 python 版的一样啊,三个值分别代表数据连接、wifi 和飞行模式。
没见到有控制蓝牙的功能。
不错,晚些试用一下。
另外,有些地方 markdown 语法用错了。
####1.更新 iOS SDK cocoaPods 版本
应为
#### 1.更新 iOS SDK cocoaPods 版本
,
更新的崩溃列表查看崩溃时间改为**最近 30 天**
应为
更新的崩溃列表查看崩溃时间改为 **最近 30 天**
markdown 对空格还是比较敏感的。
例子很赞。学习了。
学习了,去看了一下 sbt-native-packager ,打包功能真心强大!
这是 mac ?brew install node
装上的 node 不是可以不用 sudo 来安装 npm 包的吗?
分析很不错,确实找到问题根源了。
不过 appium 支持 uiautomator 的 api 本来意图是用来找元素的(所以才叫 find_element_by_android_uiautomator
)。如果返回值不是一个元素,当然会报异常。
大致看了一下, appium 对于 uiautomator 语句的检查十分严格,要求必须返回 UiScrollable 或 UiObject ,并且严格限定了参数的写法。我试过用类似 new UiSelector().checked(new UiScrollable(new UiSelector().scrollable(true)).scrollToEnd(3))
的方式绕过返回值类型的限制,但没想到它竟然连 checked 的内容都限定为只能是 true
或 false
(boolean 类型),而对于参数类型为 string 的限定了参数内容第一个和最后一个字符必须是双引号。我尝试用 new UiSelector().fromParent
绕过(object 类型的检查是最松的),但结果还是不行(提示 Could not parse UiSelector argument: UiSelector has no new UiScrollable method
)
看来 appium 只支持 uiautomator api 中查找元素的部分,而不是完全支持 uiautomator api 。不过这也符合 find_element_by_android_uiautomator
这个方法本身的定位。
学习了。 MonkeyTalk 的 API 好强大。
我终于看懂了,批量生成 SQL 语句/ json 数据。
有 api 可以让程序访问后自动生成吗?
对业务同学来说,像 MTSC 上面那种形式的 mock server 才容易上手吧。
新版的 robotframework 自带了 datetime 这个 library 的吧。
你使用 RIDE 的吗?找到一个相关的问题:http://stackoverflow.com/questions/26843149/unable-to-import-datetime-library-in-robot-framework