Java 如何在Selendroid中执行刷卡操作? 我试过使用以下代码进行刷卡 在运行测试用例时,滑动操作不会发生,我也不会收到任何错误消息 如何从左向右两侧滑动,反之亦然
有以下两种方法:- 方法1(使用触摸动作):- 方法2(使用javascript):-Java 如何在Selendroid中执行刷卡操作? 我试过使用以下代码进行刷卡 在运行测试用例时,滑动操作不会发生,我也不会收到任何错误消息 如何从左向右两侧滑动,反之亦然,java,touch,swipe,selendroid,Java,Touch,Swipe,Selendroid,有以下两种方法:- 方法1(使用触摸动作):- 方法2(使用javascript):- 公共静态无效滑动(WebDriver){ JavascriptExecutor js=(JavascriptExecutor)驱动程序; HashMap swipeObject=new java.util.HashMap(); swipeObject.put(“startX”,0.95); swipeObject.put(“startY”,0.5); swipeObject.put(“endX”,0.05);
公共静态无效滑动(WebDriver){
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
HashMap swipeObject=new java.util.HashMap();
swipeObject.put(“startX”,0.95);
swipeObject.put(“startY”,0.5);
swipeObject.put(“endX”,0.05);
swipeObject.put(“endY”,0.5);
swipeObject.put(“持续时间”,1.8);
js.executeScript(“移动:滑动”,swipeObject);
}
在功能测试大量使用JavaScript的网站时,操作完全失败的一个常见原因是,这些操作是在网站完成初始化之前执行的。测试这种情况的最简单方法是在执行操作之前添加一个短暂的睡眠。说2秒钟
如果这解决了问题,那么您就知道页面初始化和测试代码运行之间存在竞争条件
在那一点上你可以 尝试以下包含标准FlickAction.SPEED\u普通参数和flick的动作生成器的实现: 可通过改变X坐标从左向右滑动,反之亦然:
- 向左滑动:
- 向右滑动:
- 滑动到顶部:
- 滑到底部:
动作flick=getBuilder(driver()).flick(toFlick,0,-500,,FlickAction.SPEED\u NORMAL).build() 我知道这是一个老问题,但我遇到了许多类似的问题 正如其他人所指出的,这通常是一个时机问题。因此我发现,如果我等待一个元素出现(即驱动程序返回控件,页面呈现),然后在flick操作前后都进行短暂睡眠,那么它肯定会工作,在我测试过的每个页面/应用程序上都会工作。所以我们的代码看起来有点像这样:
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("some-element-id)));
flickIt(driver, element -100, 0);
private void flickIt(WebDriver driver, WebElement el, int x, int y) {
SyntheticsUtility.sleep(500); // put 0.5s sleeps around it to make sure, need to be stable
TouchActions touch = new TouchActions(driver);
touch.flick(el, x, y, FlickAction.SPEED_NORMAL);
touch.perform();
SyntheticsUtility.sleep(500);
}
这里的getBuilder方法是什么?对不起,我忘记为getBuilder添加代码了。检查最新版本的答案我已经试过你的答案了。但它没有对特定代码执行滑动或任何操作。请尝试在flick.perform()之前添加显式等待(1秒)。它将告诉您是否必须等待元素的出现。查看文档,公共类org.openqa.selenium.interactions.touch.FlickAction扩展了org.openqa.selenium.interactions.internal.TouchAction实现了org.openqa.selenium.interactions.Action。我们如何将“Action”实例(如上面代码中所描述的)实例化为接口,而不是具体的类。我是不是遗漏了什么。
public static void swipe(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, Double> swipeObject = new java.util.HashMap<String, Double>();
swipeObject.put("startX", 0.95);
swipeObject.put("startY", 0.5);
swipeObject.put("endX", 0.05);
swipeObject.put("endY", 0.5);
swipeObject.put("duration", 1.8);
js.executeScript("mobile: swipe", swipeObject);
}
import org.openqa.selenium.interactions.touch.FlickAction;
private Action getBuilder(WebDriver driver) {
return new Action(driver);
}
WebElement toFlick = driver().findElement(By.id("media-list"));
Action flick = getBuilder(driver()).flick(toFlick, -500, 0, FlickAction.SPEED_NORMAL).build();
flick.perform();
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("some-element-id)));
flickIt(driver, element -100, 0);
private void flickIt(WebDriver driver, WebElement el, int x, int y) {
SyntheticsUtility.sleep(500); // put 0.5s sleeps around it to make sure, need to be stable
TouchActions touch = new TouchActions(driver);
touch.flick(el, x, y, FlickAction.SPEED_NORMAL);
touch.perform();
SyntheticsUtility.sleep(500);
}