Appium,C#:如何在android中浏览列表
我一直在通过VisualStudio在C#中使用Appium,以实现我工作的Android应用程序的自动化 我需要从Android应用程序中的元素列表中收集详细信息。。。 但是我遇到了很多NoTouchElement异常,因为有些元素只显示了视图的一半。如果我“向下滑动”使元素完全可见,我找到的元素列表就会损坏,不再指向正确的元素。。。有什么想法吗 以下是我面临的一个例子: 我有一个10个元素的列表,在手机上你只看到4个元素,其中一个只有一半显示,如果我刷卡,我将不得不再次查找元素,并构建另一个函数来告诉我,我看到的最后一个元素是否在查看中的新元素集中Appium,C#:如何在android中浏览列表,c#,android,automation,appium,C#,Android,Automation,Appium,我一直在通过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
}
}
谢谢大卫的回复!从我的理解来看,您建议的代码将帮助我在列表本身不可见时找到元素列表,我将尝试更好地解释这一点:我有一个10个元素的列表,在手机上,您只看到4个元素,其中一个仅显示了一半,如果我刷我将不得不再次寻找的元素,并建立另一个功能,告诉我,如果我看到的最后一个元素是在新的设置