更新 java-client 和 selenium 版本后 Appium 代码不工作
Appium code not working after updating java-client and selenium version
我有一段代码适用于 java-client(5.0.0-BETA6)
和 selenium-java version 3.3.1
。但是当我升级到 java-client version 6.1.0
和 selenium-java version 3.14.0
时,代码开始抛出错误。需要帮助解决问题。
AndroidDriver<AndroidElement> driver=Base.capabilities();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
TouchAction t=new TouchAction(driver);
driver.findElementByXPath("//android.widget.TextView[@text='Views']").click();
driver.findElementByXPath("//android.widget.TextView[@text='Date Widgets']").click();
driver.findElementByAndroidUIAutomator("text(\"2. Inline\")").click();
driver.findElementByXPath("//*[@content-desc='9']").click();
t.press(driver.findElementByXPath("//*[@content-desc='15']")).waitAction(2000).moveTo(driver.findElementByXPath("//*[@content-desc='45']")).release().perform();
我得到的错误是:
TouchAction 是原始类型。对泛型类型 TouchAction 的引用应该参数化
TouchAction 类型中的方法 press(PointOption) 不适用于参数 (AndroidElement)
如能帮助解决此问题,我们将不胜感激。谢谢。
下面提到了最终对我适用于新版本的代码。不得不做很多改变。
AndroidDriver<AndroidElement> driver = BaseNew.capabilities();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
TouchAction t = new TouchAction(driver);
driver.findElementByXPath("//android.widget.TextView[@text='Views']").click();
driver.findElementByXPath("//android.widget.TextView[@text='Date Widgets']").click();
driver.findElementByAndroidUIAutomator("text(\"2. Inline\")").click();
driver.findElementByXPath("//*[@content-desc='9']").click();
t.press(ElementOption.element(driver.findElementByXPath("//*[@content-desc='15']")))
.waitAction(WaitOptions.waitOptions(Duration.ofSeconds(3)))
.moveTo(ElementOption.element(driver.findElementByXPath("//*[@content-desc='45']"))).release()
.perform();
With Appium java_client v6.0.0-BETA1 不同的 Options
像
一样被引入
ElementOption
(传递元素)
PointOption
(传递坐标)
WaitOptions
(打发等待时间)
TouchActions
class 的旧方法已弃用。你可以看到更改日志 here
import static io.appium.java_client.touch.WaitOptions.waitOptions;
import static io.appium.java_client.touch.offset.ElementOption.element;
import static io.appium.java_client.touch.offset.PointOption.point;
// Element Usage
new TouchAction(driver)
.press(element(driver.findElementById("some_element_id")))
.waitAction(waitOptions(ofSeconds(1)))
.release()
.perform();
// Coordinate usage
Point point =
driver.findElementById("some_element_id_to_get_coordinate").getLocation();
new TouchAction(driver)
.press(point(point.x + 120, point.y + 130))
.waitAction(waitOptions(ofSeconds(1))) // here ofSeconds is a java time Duration
.release()
.perform();
我有一段代码适用于 java-client(5.0.0-BETA6)
和 selenium-java version 3.3.1
。但是当我升级到 java-client version 6.1.0
和 selenium-java version 3.14.0
时,代码开始抛出错误。需要帮助解决问题。
AndroidDriver<AndroidElement> driver=Base.capabilities();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
TouchAction t=new TouchAction(driver);
driver.findElementByXPath("//android.widget.TextView[@text='Views']").click();
driver.findElementByXPath("//android.widget.TextView[@text='Date Widgets']").click();
driver.findElementByAndroidUIAutomator("text(\"2. Inline\")").click();
driver.findElementByXPath("//*[@content-desc='9']").click();
t.press(driver.findElementByXPath("//*[@content-desc='15']")).waitAction(2000).moveTo(driver.findElementByXPath("//*[@content-desc='45']")).release().perform();
我得到的错误是:
TouchAction 是原始类型。对泛型类型 TouchAction 的引用应该参数化
TouchAction 类型中的方法 press(PointOption) 不适用于参数 (AndroidElement)
如能帮助解决此问题,我们将不胜感激。谢谢。
下面提到了最终对我适用于新版本的代码。不得不做很多改变。
AndroidDriver<AndroidElement> driver = BaseNew.capabilities();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
TouchAction t = new TouchAction(driver);
driver.findElementByXPath("//android.widget.TextView[@text='Views']").click();
driver.findElementByXPath("//android.widget.TextView[@text='Date Widgets']").click();
driver.findElementByAndroidUIAutomator("text(\"2. Inline\")").click();
driver.findElementByXPath("//*[@content-desc='9']").click();
t.press(ElementOption.element(driver.findElementByXPath("//*[@content-desc='15']")))
.waitAction(WaitOptions.waitOptions(Duration.ofSeconds(3)))
.moveTo(ElementOption.element(driver.findElementByXPath("//*[@content-desc='45']"))).release()
.perform();
With Appium java_client v6.0.0-BETA1 不同的 Options
像
ElementOption
(传递元素)PointOption
(传递坐标)WaitOptions
(打发等待时间)
TouchActions
class 的旧方法已弃用。你可以看到更改日志 here
import static io.appium.java_client.touch.WaitOptions.waitOptions;
import static io.appium.java_client.touch.offset.ElementOption.element;
import static io.appium.java_client.touch.offset.PointOption.point;
// Element Usage
new TouchAction(driver)
.press(element(driver.findElementById("some_element_id")))
.waitAction(waitOptions(ofSeconds(1)))
.release()
.perform();
// Coordinate usage
Point point =
driver.findElementById("some_element_id_to_get_coordinate").getLocation();
new TouchAction(driver)
.press(point(point.x + 120, point.y + 130))
.waitAction(waitOptions(ofSeconds(1))) // here ofSeconds is a java time Duration
.release()
.perform();