无法使用适用于 iOS 混合应用程序的 appium 检查作为背景图像存在的元素

Posted

技术标签:

【中文标题】无法使用适用于 iOS 混合应用程序的 appium 检查作为背景图像存在的元素【英文标题】:Not able to inspect element present as background image using appium for iOS hybrid app 【发布时间】:2015-10-29 18:41:49 【问题描述】:

我可以使用 appium 检查器通过 appium 检查元素,但是由于我无法到达 xpath,因此无法找到页脚上存在的元素。

我尝试使用从源代码中获取的 id,但是当我运行我的测试脚本时再次显示“无法定位元素”消息。

public static void main(String[] args) 抛出 MalformedURLException, InterruptedException AppiumDriver wd;所需能力 能力 = 新的 DesiredCapabilities(); 能力.setCapability(“appium版本”,“1.0”); 能力.setCapability(“平台名称”,“ios”); 能力.setCapability(“平台版本”,“8.1”); 能力.setCapability(“设备名称”,“iPhone 6”); 能力.setCapability(“应用程序”, “/Users/deepak/Library/Developer/Xcode/DerivedData/AceMobile-adoppngvthizceerrugpjdqlruyj/Build/Products/Debug-iphonesimulator/ACE Banker.app”); wd = 新的 IOSDriver(新 URL("http://0.0.0.0:4723/wd/hub"), 能力); wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 线程.sleep(10000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIATextField1")).click(); 线程.sleep(5000); ((移动元素) wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIATextField1"))).setValue("ALMq.admin@tier1crm.com "); wd.findElement(By.name("完成")).click();线程.sleep(5000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASecureTextField1")).click(); ((MobileElement)wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASecureTextField1"))).setValue("ALMqAdmin123!" ); wd.findElement(By.name("完成")).click(); //wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIAButton1")).click(); 线程.sleep(5000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIAButton1")).click(); 线程.sleep(5000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIASecureTextField1")).click(); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIASecureTextField1")).sendKeys("1111"); wd.findElement(By.name("Next")).click(); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIASecureTextField1")).click(); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIASecureTextField1")).sendKeys("1111"); wd.findElement(By.name("完成")).click();线程.sleep(5000);

/* 我们坐在这里滚动 */

wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASwitch[8]")).click(); 线程.sleep(4000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASwitch[14]")).click(); 线程.sleep(4000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASwitch[20]")).click(); 线程.sleep(4000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASwitch[26]")).click(); 线程.sleep(4000); wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASwitch[32]")).click(); 线程.sleep(4000); //wd.findElement(By.xpath("//UIAApplication1/UIAWindow1/UIAScrollView1/UIAWebView1/UIASwitch[34]")).click(); 线程.sleep(5000);

/*滚动后这个元素没有被定位*/ WebElement element = wd.findElement(By.id("ext-button-96"));

页脚上方有一个可滚动的屏幕。

谢谢

【问题讨论】:

为什么不滚动列表,然后在页脚下找到其余的定位器? 页脚元素已经存在,但是当我们滚动时,这些元素也没有被定位。 请张贴一些带有代码的东西,向我们展示您到底在做什么。 我已经用代码更新了我的问题,我的问题再次是如果元素持续存在而不滚动,为什么我需要滚动,元素应该由 appium 检查员检查。滚动后我也尝试过,但没有成功。元素是背景图像,我不确定 appum 是否检测到背景图像。 此@Gaurav 的任何更新 【参考方案1】:

Appium 检查器和 Ui automatorviewer 将有助于获取当前 android 视图中存在的布局。(所有句柄都基于布局)。

如果需要查找视图中不存在的 xpath,请尝试向下滚动查找 xpath,id(locators)。

在脚本中尝试使用滚动到文本而不是滚动到元素。

【讨论】:

以上是关于无法使用适用于 iOS 混合应用程序的 appium 检查作为背景图像存在的元素的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight 6.0 - 无法在 avd 上使用适用于 android 环境的 dojo 工具包运行示例混合 Worklight 应用程序?

[iOS]关于 App 混合(Hybrid)开发的优化,包括H5Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)

适用于iOS应用的收据验证码,无法使用

适用于 iOs 的 Facebook SDK 无法正常工作

音频无法在适用于 iOS 的 Corona SDK 上运行

无法从 Flutter Web 读取 Firestore 中的数据(适用于 iOS 和 android)