// final JavascriptExecutor js = (JavascriptExecutor) remoteWebDriver;
//
// final HashMap swipeObj = new HashMap();
// swipeObj.put("startX", 0.0);
// swipeObj.put("startY", 100.0);
// swipeObj.put("endX", 0.0);
// swipeObj.put("endY", 400.0);
// swipeObj.put("duration", 1.0);
// // 拖动
// for (int i = 0; i < 2; i++) {
// js.executeScript("mobile: swipe", swipeObj);
//
// }
// TimeUnit.SECONDS.sleep(20);
final JavascriptExecutor js = (JavascriptExecutor) remoteWebDriver;
final Map scrollObject = new HashMap();
scrollObject.put("direction", "down");
System.out.println("Scroll object:" + scrollObject.size());
for (int i = 0; i < 1; i++) {
js.executeScript("mobile: scroll", scrollObject);
}
xcode 版本 5.1, ios 版本 7.1
info: Responding to client with success: {"status":0,"value":"","sessionId":"75d0c61a-592b-41a4-bfe9-9d48febbb09c"}
POST /wd/hub/session/75d0c61a-592b-41a4-bfe9-9d48febbb09c/url 200 1506ms - 87b
debug: Appium request initiated at /wd/hub/session/75d0c61a-592b-41a4-bfe9-9d48febbb09c/execute
debug: Request received with params: {"args":[{"direction":"down"}],"script":"mobile: scroll"}
info: Pushing command to appium work queue: "au.scrollFirstView('Down')"
debug: Sending command to instruments: au.scrollFirstView('Down')
info: [INSTSERVER] Sending command to instruments: au.scrollFirstView('Down')
info: [INST] 2014-05-19 07:30:49 +0000 Debug: target.frontMostApp().elements()[1].elements()[2].scrollDown()
info: [INSTSERVER] Socket data received (50 bytes)
info: [INSTSERVER] Socket data being routed for 'cmd' event
info: [INSTSERVER] Got result from instruments: {"status":0,"value":true}
info: Responding to client with success: {"status":0,"value":true,"sessionId":"75d0c61a-592b-41a4-bfe9-9d48febbb09c"}
POST /wd/hub/session/75d0c61a-592b-41a4-bfe9-9d48febbb09c/execute 200 289ms - 89b
debug: Appium request initiated at /wd/hub/session/75d0c61a-592b-41a4-bfe9-9d48febbb09c/execute
debug: Request received with params: {"args":[{"direction":"down"}],"script":"mobile: scroll"}
info: Pushing command to appium work queue: "au.scrollFirstView('Down')"
debug: Sending command to instruments: au.scrollFirstView('Down')
info: [INSTSERVER] Sending command to instruments: au.scrollFirstView('Down')
info: [INST] 2014-05-19 07:30:49 +0000 Debug: target.frontMostApp().elements()[1].elements()[2].scrollDown()
info: [INSTSERVER] Socket data received (50 bytes)
info: [INSTSERVER] Socket data being routed for 'cmd' event
info: [INSTSERVER] Got result from instruments: {"status":0,"value":true}
swipe 被 Apple broken 了,在 iOS 7 simulator 上。
另外,如果位置是取像素点的话,建议不要写像素,通过读取屏幕大小的方法获取座标。
int X = driver.manage().window().getSize().getWidth();
int Y = driver.manage().window().getSize().getHeight();
int sX = (int) (X * 0.9);
int sY = (int) (Y * 0.5);
int eX = (int) (X * 0.05);
int eY = sY;
int duration = 1000;
driver.swipe(sX, sY, eX, eY, duration);
#3 楼 @532589730 额, 那怎么办?
#5 楼 @tomzhangc
使用 mobile: scroll
#6 楼 @532589730 是呀, 我第二种方法用的 scroll 也看不到效果,
final JavascriptExecutor js = (JavascriptExecutor) remoteWebDriver;
final Map scrollObject = new HashMap();
scrollObject.put("direction", "down");
System.out.println("Scroll object:" + scrollObject.size());
for (int i = 0; i < 2; i++) {
js.executeScript("mobile: scroll", scrollObject);
}
TimeUnit.SECONDS.sleep(20);
#6 楼 @532589730 1.x 已经废弃了这个方法.
#9 楼 @seveniruby 我用的 1.0 版本, 看打印日志 Responding to client with success: {"status":0,"value":true 成功了吧。 模拟器竟然没反应?
#10 楼 @tomzhangc 可能残留了一个吧, mobile 方法官方都说会废弃了. 建议换成新的方式试试, 我 IOS 不熟悉
#9 楼 @seveniruby
事实上,在 Appium 1.0 上还没有废弃。
前段时间我在 google group 上问过 Jonathan Lipps,即 swipe 的问题,他说给 js 留了后门...
但我没试怎么打开...
#12 楼 @532589730 貌似是, 我貌似也看过你的这个讨论, 这个功能我没去跟.你试试的 api, 我记得有个 Touch 相关的 api 看看官方的文档里面是提倡什么 api 的
看楼主的代码,应该还没切换到 appium 1.0 上,所以可以试试 mobile: scroll,虽然迟早要切换到 appium 1.x 上来。
#13 楼 @seveniruby
之前写的一个方法.
public class iOSGesture {
private WebDriver wd;
private JavascriptExecutor js;
public iOSGesture(WebDriver wd) {
super();
this.wd = wd;
this.js = (JavascriptExecutor) this.wd;
}
public void scroll(String direction) throws InterruptedException{
HashMap<String, String> ScrollObject = new HashMap<String, String>();
ScrollObject.put("direction", direction);
this.js.executeScript("mobile: scroll", ScrollObject);
Common.sleep(1);
}
}
direction 只有四个值: left, right, up, down。
在 iOS7 上,是可以的。但无法拖拽一个 WebElement,从一个地方到另一个地方,但 Python 可以实现,在 iOS 7 上,之前我写过一贴子。
#14 楼 @532589730 额, 是有用 js.executeScript("mobile: scroll", scrollObject);
模拟器也没反应, case 最终报是 成功的。
但模拟器上看不到 滑动 的效果,准确的说是屏幕一直静止。
#16 楼 @tomzhangc
妳的 scrollObject 是什么值?
#17 楼 @532589730
final JavascriptExecutor js = (JavascriptExecutor) remoteWebDriver;
final Map scrollObject = new HashMap();
scrollObject.put("direction", "down");
//System.out.println("Scroll object:" + scrollObject.size());
for (int i = 0; i < 2; i++) {
js.executeScript("mobile: scroll", scrollObject);
}
TimeUnit.SECONDS.sleep(20);
另外, 我使用 safari 打开一个页面, 进行滑动操作。
final JavascriptExecutor js = (JavascriptExecutor) remoteWebDriver;
final Map<String, String> scrollObject = new HashMap<String, String>();
scrollObject.put("direction", "down");
//System.out.println("Scroll object:" + scrollObject.size());
for (int i = 0; i < 2; i++) {
js.executeScript("mobile: scroll", scrollObject);
}
TimeUnit.SECONDS.sleep(20);
#16 楼 @tomzhangc 官方的建议是 driver.swipe(75, 500, 75, 0, 0.8)
大概下面那样子吧,没验证。
WebDriver driver;
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, String> ScrollObject = new HashMap<String, String>();
ScrollObject.put("direction", [Your direction string]); //direction = "left", "right", "up", "down"
this.js.executeScript("mobile: scroll", ScrollObject);
#21 楼 @seveniruby
这个会报错的,原因是 duration 要 int 类型,是毫秒,除非自己改 Java-Client
driver.swipe(75, 500, 75, 0, 0.8)
#21 楼 @seveniruby 好 我试试看。
#23 楼 @532589730 没有 swipe 这个 api
#25 楼 @tomzhangc
driver.swipe() 是 Appium 1.0 的方法来的,所以妳最好说明妳的 Appium 是什么版本的。
tomzhangc@tomMBP:searchappium$appium -v
1.0.0
#27 楼 @tomzhangc
是的 1.0 的话,有 swipe 方法。
至于怎么"激活" "mobile:",那得摸索下了。
#28 楼 @532589730 这个 driver 是什么类型对象?
我这边 没有 swipe 这个方法呢。
public WebDriver remoteWebDriver;
#29 楼 @tomzhangc
Appium 1.0 的 Java 的话,应该是
private AppiumDriver driver;
请参考 appium 的示例.
https://github.com/appium/appium/tree/master/sample-code/examples/java/junit/src/test/java/com/saucelabs/appium
#31 楼 @532589730 用这个新定义的类型,就不通用了。
同样的代码, 也是 appium1.0 我同事那边 xcode4.6.4 竟然可以滑动。
#32 楼 @tomzhangc
要看 iOS 版本的,我把 iOS 切换到 iOS6.x 后,driver.swipe() 马上可以滑动,就 4 楼代码,从右向左滑动。
#33 楼 @532589730 ios 版本 需要 shell 下配置吗?
#34 楼 @tomzhangc
...
在 Xcode 上打开一项目,好像跑 simulator 时可以选 iOS simulator 设备的,里面就可以看到 iOS 有什么版本。
Appium 会运行指定 Xcode 的最高版本的 iOS。
另外一种方法是使用 ios-sim 查看默认 Xcode 的 iOS 版本。
我也只会这两种笨方法。
#35 楼 @532589730 那这样的话,xcode5.1 最高 ios7.1 了。
#36 楼 @tomzhangc
那请慢读我 3 楼的回复。
#3 楼 @532589730 那就是说 我要安装 xcode4.6 用 ios6 了。额
多谢哈,我先升级下 xcode 再看看吧。
#33 楼 @532589730 hi, Instruments wants permission to analyze other processes xcode4.6.3 这个问题碰到过吗?谢谢。
#40 楼 @tomzhangc
找 Google
#39 楼 @tomzhangc 将 Xcode4.6.3 切换为默认得了么?