使用 appium 自动化 IOS UITableview

Posted

技术标签:

【中文标题】使用 appium 自动化 IOS UITableview【英文标题】:Automate IOS UITableview using appium 【发布时间】:2016-07-29 12:18:37 【问题描述】:

我有一个包含大约 50 个元素的 UITableView。在任何时候,只有其中 6 个在屏幕上可见。我想选择一个未添加到表格视图的单元格,或者说我需要从数据列表中选择第 25 项。

现在我正在使用这种方法单击表格视图中的单元格

wait.until(ExpectedConditions.visibilityOf(driver.findElementByAccessibilityId(element))).click();

但它不起作用,因为第 25 个元素尚未添加到视图中。请注意,我正在代码中动态添加表格视图单元格的可访问性标识符。

我怎样才能做到这一点?

*****添加了更多细节******

我的表格视图单元格显示了两个文本视图。货币短名称和货币长名称。

考虑这个例子

英镑

英镑

现在该表格视图单元格的可访问性标识符设置为 英镑。现在我尝试了

driver.scrollTo("GBP") 和 driver.scrollTo("英国英镑")

两者都没有工作。我收到一条错误消息

A element could not be located on the page using the Search parameter

谢谢。

【问题讨论】:

你知道元素的文本吗?因为 driver.scrollTo("Text") 在 ios 中就像一个魅力。 您尝试过 X-Path 吗? x-path 中的索引应该可以帮助您在滚动时访问元素。 我认为你应该在选择之前显示单元格。可能您应该滚动到目标单元格(使用表格视图方法),然后尝试选择它。要查找单元格索引,您可以在模型数组中确定其模型。之所以需要它,是因为 TableView 重用了单元格,并且您在运行时为任何 tableView 的单元格更改 AccessibilityId 如果您知道单元格的高度,您还可以将表格视图滚动到某个偏移量,然后再尝试找到它。 【参考方案1】:
    String ReqN = "Your required string"; 
    boolean flag = true;
    while (flag) 
        for (i=1;i<=6;i++) 
            String GetN = driver.findElement(By.xpath("//android.widget.HorizontalScrollView/android.widget.LinearLayout[" + i + "]")).getText();
            if (GetN.equals(ReqN)) 
                flag = false;
                System.out.println("Your result found");
            
        
        if (flag) 
            driver.swipe(145, 765, 145, 180, 3000);
        
    

String ReqN :: 您的预定义字符串

String GetN :: 为每个元素获取文本 [1 到 6 我们通过 for 循环获得]

因此,如果未找到您的预定义文本,它将获取前六个元素的文本和匹配,然后它从给定的轴 [这是第 6 个元素到第一个元素] 滑动。所以您将获得新的六个元素和循环将再次执行。

参考。图片Elements & X,Y points

【讨论】:

以上是关于使用 appium 自动化 IOS UITableview的主要内容,如果未能解决你的问题,请参考以下文章

如何用appium测试ios包

移动端自动化自动化(Android&iOS)——Appium

使用 Appium 自动化 iOS 8 应用程序会导致应用程序冻结

如何在 Appium 中为 iOS 自动化启用和使用 WebView

Mac下appium ios自动化测试

使用 appium 自动化 IOS UITableview