Appium [iOS Native app] - 如何使用Java滚动到特定元素/对象?

时间:2016-03-31 05:44:38

标签: java appium ios-ui-automation appium-ios python-appium

我想滚动到一个特定的元素,这个元素目前在屏幕上是不可见的,但它在某个页面的某个位置,我必须向下滚动。因此NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu]; NSMenu *appMenu = [[mainMenu itemAtIndex:5] submenu]; NSMenuItem *item=[[NSMenuItem alloc]initWithTitle:@"Tutorial" action:@selector(actionTutorial:) keyEquivalent:@"T"]; [item setTarget:self]; [item setTag:0]; [appMenu addItem:item]; [appMenu removeItemAtIndex:2]; // which is the index of above added item. 无效,我尝试了dr.scrollTo(),但也无效。那么有什么想法吗?

如果可能的话,我希望它是Generic,这样它可以向上和向下搜索对象位置不确定的位置。

2 个答案:

答案 0 :(得分:0)

原始appium解决方案:https://www.youtube.com/watch?v=Z228YKNBrgM

作为一种解决方法,您可以滚动/滑动,直到iOS显示/启用/可点击元素,或者仅适用于Android

答案 1 :(得分:0)

解决方案是一种解决方法。这没有确切的功能。 首先让我们收集要求 - 滚动页面(范围从 - [当前页面位置,页面结束]),直到给定元素可见。

对于滚动,我们可以使用 -

driver.swipe(startx, starty, startx, endy, 1000);

为了查找元素可见性,我们可以使用像

这样的代码
 try {
            dr.findElement(By.xpath(xpath); // find element with whatever Selector, I am using xpath
            if (dr.findElementsByXPath(xpath).size()>0 && dr.findElement(By.xpath(xpath)).isDisplayed()){
                System.out.println("Element found by xpath : " + xpath);
                return true;
            } else
                return false;
        } catch (NoSuchElementException e1) {
            System.out.println("Object not found");
            return false;
        } catch (Exception e2) {
            System.out.println("Unhandled Exception found");
            e2.printStackTrace();
            throw e2;
        }

现在我们必须设置一个条件,如果最后一个元素可见,滚动应该停止。为此,我们可以修改当前元素的xpath,并检查该xpath找到的元素的可见性,如 -

String xpath_last = elementxpath.concat("/../*[last()]");  // if we are scrolling downwards then [last()]. But if we are scrolling up then make it [1]

这样就完成了你的病情。我想这应该做的!