selenium-webdriver - 关于使用 Appium TouchActions 的 ClassCastException
问题描述
我尝试使用 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
如果您想了解其他信息,请告诉我。还给我建议最好的方式来执行移动操作,如滑动(所有方向)、点击、双击、长按等。提前致谢。
解决方案
使用 AppiumTouchAction
代替 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);
推荐阅读
- javascript - 选择一个文本并复制到另一个网站的 xpath 元素
- linux - 如何解决我的脚本问题发出 SED 命令
- html - SVG 的 tabIndex 在 IE 和 React 中不起作用
- javascript - 使用 axios 链接异步调用的理想方式
- javascript - 基于函数顺序的不同函数输出
- sql - 如何根据另一列中的值找到一列中的最大值?SQL
- f# - 删除 F# 中的嵌套匹配?
- bash - bash 鲁棒性:为了“退出”清理例程的目的,什么是正确且可移植的陷阱方法?
- docker - Elixir 在 docker 中请求缓慢,凤凰代码重新加载器开启
- javascript - 如果用户更改输入而不保存,则启动确认对话框