ClassCastException при использовании Appium TouchActions

Я пытаюсь выполнить действие касания, используя класс Appium TouchActions, но он генерирует исключения. Пожалуйста, предоставьте свое решение.

import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.interactions.touch.TouchActions;
===========================================================
WebDriver driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities());
        Thread.sleep(5000);
        String title = driver.findElement(By.id("app_title")).getText();
        System.out.println("TITLE: " + title);
        WebElement ele = driver.findElement(By.id("bt1"));
        TouchActions touch = new TouchActions(driver);
        touch.singleTap(ele);
        touch.perform();

Вывод и исключение:

Aug 02, 2018 6:51:11 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
TITLE: TestApp
java.lang.ClassCastException: io.appium.java_client.android.AndroidDriver cannot be cast to org.openqa.selenium.interactions.HasTouchScreen
at org.openqa.selenium.interactions.touch.TouchActions.<init>(TouchActions.java:38)
at scratchpad.MobileAutomation.main(MobileAutomation.java:23)

Process finished with exit code 0

Используемая версия: selenium-java: 3.11.0 java-client(io.appium): 5.0.4

Дайте мне знать, если вам нужна какая-либо другая информация. Также дайте мне предложение лучший способ выполнения мобильных операций, таких как пролистывание (во всех направлениях), нажатие, двойное нажатие, длительное нажатие и т. д. Заранее спасибо.


person DINESH KUMAR    schedule 02.08.2018    source источник
comment
Вместо WebElement рассмотрите возможность использования MobileElement или AndroidElement.   -  person Bill Hileman    schedule 02.08.2018
comment
touch.singleTap (Эле); принимает только WebElement, а не MobileElement или AndroidElement. Так какой смысл вы хотите сказать, сэр?   -  person DINESH KUMAR    schedule 02.08.2018


Ответы (2)


Используйте Appium TouchAction вместо Selenium TouchActions. Также полезно поместить приведенный ниже код в родительский класс вашего тестового класса:

import io.appium.java_client.TouchAction;

public AndroidDriver<MobileElement> driver = new TouchAction(driver);

public void tap(MobileElement element) {

  getTouchAction()
    .tap(
      new TapOptions().withElement(
        ElementOption.element(
          element)))
    .perform();
}

Вызовите метод ():

tap(myMobileElement);
person Zon    schedule 27.08.2018

Есть некоторая проблема с тем, что вы можете использовать TouchAction, вот пример

TouchAction t = new TouchAction(driver);
        t.tap(TapOptions.tapOptions().withElement(ElementOption.element(webElementForExpandibleList))).perform();
person Pulkit Varshney    schedule 12.09.2020