Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Appium,C#:如何在android中浏览列表_C#_Android_Automation_Appium - Fatal编程技术网

Appium,C#:如何在android中浏览列表

Appium,C#:如何在android中浏览列表,c#,android,automation,appium,C#,Android,Automation,Appium,我一直在通过VisualStudio在C#中使用Appium,以实现我工作的Android应用程序的自动化 我需要从Android应用程序中的元素列表中收集详细信息。。。 但是我遇到了很多NoTouchElement异常,因为有些元素只显示了视图的一半。如果我“向下滑动”使元素完全可见,我找到的元素列表就会损坏,不再指向正确的元素。。。有什么想法吗 以下是我面临的一个例子: 我有一个10个元素的列表,在手机上你只看到4个元素,其中一个只有一半显示,如果我刷卡,我将不得不再次查找元素,并构建另一个

我一直在通过VisualStudio在C#中使用Appium,以实现我工作的Android应用程序的自动化

我需要从Android应用程序中的元素列表中收集详细信息。。。 但是我遇到了很多NoTouchElement异常,因为有些元素只显示了视图的一半。如果我“向下滑动”使元素完全可见,我找到的元素列表就会损坏,不再指向正确的元素。。。有什么想法吗

以下是我面临的一个例子: 我有一个10个元素的列表,在手机上你只看到4个元素,其中一个只有一半显示,如果我刷卡,我将不得不再次查找元素,并构建另一个函数来告诉我,我看到的最后一个元素是否在查看中的新元素集中

manager.test.Log(Status.Info,“查找有问题的元素并删除它:”);
int-boxsize=0;
尝试
{
boxsize=manager.Driver.FindElementById(“com.unionBank.app:id/main\u linear\u layout”).Size.Height;
}
捕获(例外e)
{
manager.test.Log(Status.Fail,“未能找到元素…”);
投掷e;
}
var screensize=manager.Driver.Manage().Window.Size.Height;
var-box=manager.Driver.findelementsbyd(“com.unionBank.app:id/main\u linear\u布局”);
对于(int i=0;i删除元素
完成…”); res+=“\n已删除”; 打破 } } else if((box.Location.Y+boxsize)>屏幕大小) { var move=screensize-(box.Location.Y+boxsize-screensize); 经理。司机。刷卡(0,屏幕大小-10,0,移动-20800); elementDate=box.FindElementById(“com.unionBank.app:id/executed_date_text_view”).text.Replace(“com.unionBank.app:id/executed_text_view”); elementStatus=box.FindElementById(“com.unionBank.app:id/status\u text\u view”).text.Replace(“com.unionBank.app:id/status\u text\u view”); elementAmount=box.FindElement(GetAmountLocator(manager)).Text.Replace(“₪”).Replace(“,”,”); elementRef=box.FindElementById(“com.unionBank.app:id/reference_number_text_view”).text.Replace(“com.unionBank.app:id/reference_number_text_view”); 如果((elementDate.Contains(date))&&&(elementStatus.Equals(status))&&(elementAmount.Contains(amount))&&(elementRef.Equals(reference))) { var button=box.FindElementById(“com.unionBank.app:id/cancel_操作”); 按钮。单击(); res+=“\n查找要取消的订单”; var cancelBtn=manager.Driver.FindElementById(“com.unionBank.app:id/取消订单按钮”); cancelBtn.Click(); manager.test.Log(Status.Pass,“发现元素
删除元素
完成…”); res+=“\n已删除”; 打破 } var moveNext=屏幕大小-框大小; 管理器。驱动程序。滑动(0,屏幕大小-10,0,移动下一步-10800); box=manager.Driver.FindElementsById(“com.unionBank.app:id/main\u linear\u布局”); i=1; } }
佩莱格·沙洛姆

您的代码过于复杂,没有解决您的主要问题,因为我用Java而不是C实现自动化,我将用一些简单的步骤解释您需要做什么:

  • 创建一个名为
    scrollDown()
    的函数-只是一个向下滚动一点的函数

  • 创建一个函数
    findElementUsingScrolling(By,int interactions)
    -在这个函数中,您只在屏幕中搜索元素,直到它可见为止,基本上您所做的是->

    findElementUsingScrolling(By by, int interactions){
        if (driver.findElements(by).size() == 0){
           scrollDown(); //Element is not on screen, scroll down again
        }else { 
           return; //This means that the element is now on screen
        }
      }
    
  • 此时,您知道“elementDate”在屏幕上并且可见。现在您终于可以与它交互并更改其文本


  • 谢谢大卫的回复!从我的理解来看,您建议的代码将帮助我在列表本身不可见时找到元素列表,我将尝试更好地解释这一点:我有一个10个元素的列表,在手机上,您只看到4个元素,其中一个仅显示了一半,如果我刷我将不得不再次寻找的元素,并建立另一个功能,告诉我,如果我看到的最后一个元素是在新的设置