【问题标题】:Drag and Drop Android Webpage element - Appium 4.2.0拖放 Android 网页元素 - Appium 4.2.0
【发布时间】:2021-03-28 10:24:40
【问题描述】:

我在 Android 平板电脑的网页上拖放元素时遇到了很多麻烦。 我使用的代码是这样的:

        IWebElement dragFrom = driver.FindElement(By.XPath(dragElement));
        IWebElement dragTo = driver.FindElement(By.XPath(dropElement));
        Point fromPoint = dragFrom.Location;
        Point toPoint = dragTo.Location;

            ((AndroidDriver<AndroidElement>)driver).Context = "NATIVE_APP";


        new TouchAction((AndroidDriver<AndroidElement>)driver).
            LongPress(fromPoint.X, fromPoint.Y).
            Wait(3000).
            MoveTo(toPoint.X, toPoint.Y).
            Release().Perform();

        ((AndroidDriver<AndroidElement>)driver).Context = "CHROMIUM";

但是,当我使用它时,浏览器的最顶部会被点击,要么是浏览器选项卡,要么可能是它从设备顶部的滑动菜单中略微下拉。 我查看了点的 X 和 Y,它们不是屏幕的左上角(X 740,Y 50)

最初我只使用了 Actions,但我收到了一些疯狂的错误消息“OpenQA.Selenium.WebDriverException:'处理命令时发生未知的服务器端错误。原始错误:无法代理。代理错误:无法代理命令到远程服务器。原始错误:501 -“未实现的命令:”

Actions actions = new Actions(driver);
        actions.DragAndDrop(
            driver.FindElement(By.XPath(dragElement)),
            driver.FindElement(By.XPath(dropElement)))
            .Release()
            .Build().Perform();

我也使用了下面的代码,但现在一个错误告诉我 Swipe 不存在

                TouchAction action = new TouchAction((IPerformsTouchActions)driver);
            action.Press(startX, startY).Wait(1000).MoveTo(endX, endY).Release().Perform();
            ((AndroidDriver<IWebElement>)driver).Swipe(startX, startY, endX, endY, 100); 

在使用 Android 设备时,有没有人有可靠的方法在网页上拖放元素?或者知道我在上面的代码中做错了什么吗?

似乎当appium点击屏幕时,它没有考虑浏览器标题的大小,因此例如当它点击Y 24时,它会按照总屏幕大小,而不是网页屏幕大小。所以它从手机屏幕顶部向下点击 24 像素,而不是从网页顶部。

提前致谢。

【问题讨论】:

    标签: c# android selenium drag-and-drop appium


    【解决方案1】:

    我已经设法让这个工作。将 Appium 桌面程序更新到 1.19 后,我可以让 Actions 再次运行。 所以我用了这个

                Actions actions = new Actions(driver);
    
            
                actions.DragAndDrop(
                    driver.FindElement(By.XPath(dragElement)),
                    driver.FindElement(By.XPath(dropElement)))
                    .Release()
                    .Build().Perform();
                Thread.Sleep(2000);
                actions = null;
    

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多