В Appium 1.4.13 работал такой псевдокод: JavascriptExecutor js = (JavascriptExecutor) dr; HashMap<String, Double> tapObject = new HashMap<String, Double>(); tapObject.put("x", x); tapObject.put("y", y); tapObject.put("duration", 0.0); // Время tapObject.put("touchCount", 1.0); // Пальцы tapObject.put("tapCount", 2.0); // Тапы js.executeScript("mobile: tap", tapObject);
В Appium 1.5.2 такой костыль убрали.
С помощью Multitouch используется одновременное нажатие несколькими пальцами, а как сделать двойной тап с помощью Multitouch и TouchAction я не совсем понимаю.
Может быть кто-то реализовывал двойной тап валидным способом для версии Appium 1.5.2?
Посмотрите как в AppiumDriver реализован метод tap, кажется он вполне позволяет сделать двойной тап по элементу
@Override public void tap(int fingers, WebElement element, int duration) {
MultiTouchAction multiTouch = new MultiTouchAction(this);
for (int i = 0; i < fingers; i++) {
multiTouch.add(createTap(element, duration));
}
multiTouch.perform();
}
Как я понял, это одновременный tap N пальцами, но мне же нужен последовательный тап. Или я не прав?
Вот так не получилось:
public void doubleTap() {
WebElement el = dr.findElement(MobileBy.AccessibilityId("devicesBackground"));
MultiTouchAction multiTouch = new MultiTouchAction(dr);
for (int i = 0; i < 2; i++) {
multiTouch.add(createTap(el, 500));
}
multiTouch.perform();
}
private TouchAction createTap(WebElement element, int duration) {
TouchAction tap = new TouchAction(dr);
return tap.press(element).waitAction(duration).release();
}
Там немного сложнее, это невидимый элемент на плеере (двойной тап на плеере - переход в fullscreen).
Но суть в том, что по координатам (они высчитываются корректно) тоже не работает.
может быть стоит дождаться версии 4.0.0, так как сейчас со swipe у меня тоже специфические проблемы?
FIX of TouchAction. Instances of the TouchAction class are reusable now FIX of the swiping issue (iOS, server version >= 1.5.0). Now the swiping is implemented differently by AndroidDriver and IOSDriver. Thanks to @truebit and @nuggit32 for the catching.
Ну может быть ваш плеер обернут в какой-нибудь лэйаут/вью и он как раз таки и clickable?
Походите по дереву элементов в инспекторе, посмотрите свойства лэйаутов и вьюх
А стандартный doubleTap() из XCode Automation не работает?
Example:
((JavascriptExecutor) getDriver()).executeScript(“target.frontMostApp().mainWindow().tableViews()[0].cells()[4].doubleTap()”);
Путь к элементу должен быть абсолютный (полный начиная с target).
Я уже откатился к v1.4.13, в ней не работает (элемент точно есть): JavascriptExecutor js = (JavascriptExecutor) dr; js.executeScript("target.frontMostApp().mainWindow().images()[\"devicesBackground\"]");