当前位置: 首页 > 面试题库 >

如何使用TouchAction使用Appium 1.7.1滚动

穆乐逸
2023-03-14
问题内容

我在向下滚动到iOS和Android应用程序中的某个元素时遇到麻烦。由于从Appium
1.6.3更新到1.7.1,将io.appium更新到6.1.0,因此不建议使用swipe方法,唯一的解决方案是使用TouchActions。

我尝试使用TouchActions解决它,但是它根本没有滚动,或者滚动方向错误。

到目前为止,我的解决方案看起来像这样,也许有人可以解释我做错了什么:

public void scrollDownUntilElementVisible(WebElement element){
    TouchAction touchAction = new TouchAction(getDriver());
    for(int i=0; i<dimensions.getHeight();i++){
       if(element.isDisplayed()){
          break;
       }else{
          touchAction.press(0,0).moveTo(element).release().perform();
       }
    }
}

它不是完整的html" target="_blank">代码,但希望您能理解。

如果我使用x,y坐标代替我在示例中查找的webElement,它将如何工作?它不像以前版本中的swipe方法那样工作,或者我做的不正确。也许有人可以解释。


问题答案:

我需要滚动查找屏幕外的元素。我想出的是:

  1. 在当前/可见屏幕上搜索所需的元素。
  2. 如果找不到该元素(即不在屏幕上)- scrollDown(在我的情况下,只需要向下滚动)并再次转到步骤1。我已经将测试限制为4次迭代,因为就我而言,这已经足够了,因此请在此处使用您自己的条件。
    private void scrollDown() {
        //if pressX was zero it didn't work for me
        int pressX = driver.manage().window().getSize().width / 2;
        // 4/5 of the screen as the bottom finger-press point
        int bottomY = driver.manage().window().getSize().height * 4/5;
        // just non zero point, as it didn't scroll to zero normally
        int topY = driver.manage().window().getSize().height / 8;
        //scroll with TouchAction by itself
        scroll(pressX, bottomY, pressX, topY);
    }

    /*
     * don't forget that it's "natural scroll" where 
     * fromY is the point where you press the and toY where you release it
     */
    private void scroll(int fromX, int fromY, int toX, int toY) {
        TouchAction touchAction = new TouchAction(driver);
        touchAction.longPress(fromX, fromY).moveTo(toX, toY).release().perform();
    }

PS您可以从元素获取坐标并在中使用它scroll

PSS我用过鸦片1.6.5



 类似资料:
  • 在iOS和Android应用程序中,我无法向下滚动到某个元素。由于从Appium 1.6.3更新到1.7.1,从io.Appium更新到6.1.0,因此不推荐使用滑动方法,唯一的解决方案是使用TouchActions。 我试图用TouchActions解决它,但它根本没有滚动,或者滚动方向错误。 到目前为止,我的解决方案是这样的,也许有人能解释我做错了什么: 这不是完整的代码,但我希望你明白。 如

  • 目前,我正在为ios ionic应用程序编写一个Appium脚本,我使用以下方法来实现滑动功能。 在上面的方法中,单词press,waitAction

  • 问题内容: 我有个问题。 我有一个带有一些JTextField,JLabel,Jlists和JButtons的JFrame,现在我框架的内容超出了屏幕区域,因此我想将JScrollBar附加到我的JFrame上,但是滚动条不起作用。因此,有人可以指导我如何使用JScrollbar滚动JFrame吗? 问题答案: 将所有组件放在一个面板中(而不是在JFrame中) 将此面板添加到JScrollPan

  • 我正在尝试使用pyqt5创建一个垂直布局的滚动区,我正在里面放一些标签。我知道,即使是垂直布局,如果文本不适合,也应该水平滚动。但无论我尝试什么,它都不让我滚动。 这是我正在使用的代码: 下面是它的外观: 下面是它的样子: 我希望我的问题是清楚的

  • 问题内容: 如何使Selenium WebDriver滚动到特定元素以使其显示在屏幕上。我尝试了很多不同的选择,但是没有运气。这在c#绑定中不起作用吗? 我可以使它跳到特定的位置, 但是我希望能够将其发送到不同的元素,而不必每次都给出确切的位置。 例1) 例2) 当我观看它时,它不会将页面跳到该元素,并且异常与不在屏幕上的元素匹配。 更新:我添加了bool ex = Example.Exists(

  • 问题内容: MyBatis迁移将每个SQL文件分为两部分: 一种用于向前迁移一个版本 一种用于迁移回一个版本 如何使用Flyway回滚版本? 问题答案: 尽管Flyway支持回滚(仅作为商业功能),但不鼓励使用它: https://flywaydb.org/documentation/command/undo 尽管撤消迁移的想法很好,但不幸的是,有时它在实践中会崩溃。一旦您进行了破坏性的更改(删除