我一直在使用Appium在C#通过VisualStudio自动化我的工作的Android应用程序。
我需要从Android应用程序中的元素列表中收集详细信息。。。但是我遇到了很多NoTouchElement异常,因为有些元素只显示了视图的一半。如果我“向下滑动”使元素完全可见,我找到的元素列表就会损坏,不再指向正确的元素。。。有什么想法吗?
下面是我面临的一个例子:我有一个10个元素的列表,在手机上你只看到4个元素,其中一个只有一半显示,如果我刷卡,我将不得不再次查找元素,并构建另一个函数来告诉我,我看到的最后一个元素现在是否在查看的新元素集中
manager.test.Log(Status.Info, "Looking for the element in question and deleting it: ");
int boxsize=0;
try
{
boxsize = manager.Driver.FindElementById("com.unionBank.app:id/main_linear_layout").Size.Height;
}
catch (Exception e)
{
manager.test.Log(Status.Fail,"Failed to find Elements...");
throw e;
}
var screensize = manager.Driver.Manage().Window.Size.Height;
var Boxes = manager.Driver.FindElementsById("com.unionBank.app:id/main_linear_layout");
for (int i=0; i < Boxes.Count; i++)
{
var box = Boxes[i];
if ((box.Location.Y + boxsize) < screensize)
{
elementDate = box.FindElementById("com.unionBank.app:id/executed_date_text_view").Text.Replace("תאריך ביצוע: ", "");
elementStatus = box.FindElementById("com.unionBank.app:id/status_text_view").Text.Replace("סטאטוס: ", "");
elementAmount = box.FindElement(GetAmountLocator(manager)).Text.Replace("₪", "").Replace(",","");
elementRef = box.FindElementById("com.unionBank.app:id/reference_number_text_view").Text.Replace("אסמכתא: ", "") ;
if ((elementDate.Contains(date)) && (elementStatus.Equals(status)) && (elementAmount.Contains(amount)) && (elementRef.Equals(referance)) )
{
var button = box.FindElementById("com.unionBank.app:id/cancel_operation");
button.Click();
res += "\nFound the Order to cancel";
Thread.Sleep(5000);
var cancelBtn = manager.Driver.FindElementById("com.unionBank.app:id/cancel_order_button");
cancelBtn.Click();
manager.test.Log(Status.Pass, "Found elemnt <br/> Deleteing element <br/> Done... ");
res += "\nDeleted";
break;
}
}
else if ((box.Location.Y + boxsize) > screensize)
{
var move = screensize - (box.Location.Y + boxsize - screensize);
manager.Driver.Swipe(0, screensize - 10, 0, move - 20, 800);
elementDate = box.FindElementById("com.unionBank.app:id/executed_date_text_view").Text.Replace("תאריך ביצוע: ", "");
elementStatus = box.FindElementById("com.unionBank.app:id/status_text_view").Text.Replace("סטאטוס: ", "");
elementAmount = box.FindElement(GetAmountLocator(manager)).Text.Replace("₪", "").Replace(",", "");
elementRef = box.FindElementById("com.unionBank.app:id/reference_number_text_view").Text.Replace("אסמכתא: ", "");
if ((elementDate.Contains(date)) && (elementStatus.Equals(status)) && (elementAmount.Contains(amount)) && (elementRef.Equals(referance)))
{
var button = box.FindElementById("com.unionBank.app:id/cancel_operation");
button.Click();
res += "\nFound the Order to cancel";
var cancelBtn = manager.Driver.FindElementById("com.unionBank.app:id/cancel_order_button");
cancelBtn.Click();
manager.test.Log(Status.Pass, "Found elemnt <br/> Deleteing element <br/> Done... ");
res += "\nDeleted";
break;
}
var moveNext = screensize- boxsize;
manager.Driver.Swipe(0, screensize - 10, 0, moveNext - 10, 800);
Boxes = manager.Driver.FindElementsById("com.unionBank.app:id/main_linear_layout");
i = 1;
}
}
佩列格·沙洛姆。
您的代码过于复杂,没有解决您的主要问题,因为我用Java而不是C实现自动化,我将用一些简单的步骤解释您需要做什么:
>
创建一个函数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
}
}
此时,您知道“元素日期”在屏幕上并且可见。现在您终于可以与它交互并更改其文本。
我已经搜索了这个主题,但我没有得到任何有用的教程。有人能给我指出正确的文档吗?
我有一个应用程序页面,我需要垂直滚动,以达到应用程序的底部保存按钮。 我正在尝试下面的代码,但得到服务器端错误。 有什么好方法可以在android中实现滚动功能吗?
请有人帮我解决这个问题。提前道谢。当运行java代码在模拟器中打开chrome浏览器时,我收到“无法启动Chromedriver会话:无法创建新会话。详细信息:未创建会话:此版本的Chromedriver仅支持chrome 83版”错误消息。
我第一次使用JSON Web令牌(JWT)。我正在制作一个节点。js应用程序。我想使用JWT进行身份验证。根据文档,我将JSON令牌返回到前端。 但是我不知道如何将这个JSON令牌保存到我的浏览器头中,这样它就不会丢失,并随头一起再次发送到后端。如何将它保存在我的浏览器存储中,并在每次向后端发送请求时将其添加到请求头中?
我正在开发一个应用程序,用户可以在其中打开任意多个片段,但所有片段都是唯一类的对象。fragment类在其视图中只有一个WebView。每当用户点击WebView中的链接时,链接就会被加载到一个新的片段中。以下是如何将新片段替换为当前片段: 当用户点击后退按钮时: 一切正常,但我遇到了一些问题,当用户想回去的情况。关键是,当前一个片段从Backback弹出时,它的webview再次开始加载它的ur
我正在尝试配置Robot框架,以便在android模拟器中打开Chrome浏览器。我有这样的代码: 运行脚本时,出现以下错误: 11:10:39.547INFO创建远程WebDriver的实例。 11:10:40.548INFO无法连接到主机上的端口4444127.0.0.1 11:10:40.548INFO无法获取主机的IP地址:127.0.0.1 11:10:41.561FAIL URLErr