代码之家  ›  专栏  ›  技术社区  ›  vaibhav misra

更新java客户端和selenium版本后,Appium代码不起作用

  •  0
  • vaibhav misra  · 技术社区  · 7 年前

    我有一段代码可以很好地处理 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();
    

    我得到的错误是:

    1. TouchAction是原始类型。对泛型类型TouchAction的引用应参数化“

    2. 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();
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Amit Jain    7 年前

    不同的 Options 是这样介绍的

    1. ElementOption (传递元素)
    2. PointOption (传递坐标)
    3. WaitOptions

    旧的方法 TouchActions 班级是 已弃用 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();