【发布时间】:2020-01-06 13:19:02
【问题描述】:
我正在使用 AppiumDriver 和 MobileElement java 包(我正在用 Kotlin 编写)来测试一个 iOS 应用程序,该应用程序已经使用 XCUITest 编写了测试。
我需要一个与 XCUIElement.exists() 在 XCUITest 中的行为相同的函数。如果所讨论的 UIElement 出现在屏幕上无论它是否可见/可点击,这将是一个返回 true 的函数。这方面的一个示例是嵌入在看不见的滚动视图中的 UI 元素(未滚动到)。它在页面上,但不可见也不可点击。
现在我有一个 UI 元素看不见的滚动视图,程序将挂起等待它们的可见性,直到我手动滚动滚动视图以将它们带入视图,此时它将通过测试。
我可以确认 MobileElement.->
isDisplayed()(根据我所见,这更像 isHittable() 而不是 exists())
isEnabled()
isSelected()
所有人都不做我想做的事,也不做任何事情:
driver.findElements(By.xpath("value")).size() != 0
如果我没记错的话,上面这行似乎在与 isDisplayed 完全相同的情况下返回 true。
编辑:一些用户建议由于延迟加载,元素可能还不存在,这就是为什么
driver.findElements(By.xpath("value")).size() != 0
行不工作。作为对此的回应,我在 iOS 应用程序中添加了代表滚动视图的 div 图像。在用户手动向下滚动以使其在请求超时之前可见之前,仍然无法找到突出显示的 UI 元素。
【问题讨论】:
-
我的猜测是,在您滚动之前,这些元素可能实际上并不存在。查找“延迟加载”以获取更多信息。您能否在开发控制台中验证它们在滚动之前确实存在?
-
它们似乎存在。我在 appium 中属性检查器的“应用程序源”部分查看了我的应用程序,可以看到元素实际上就在那里,嵌入在滚动视图中,即使它们当前没有滚动到。我不确定这是否证明元素实际上在 DOM 中,但我觉得确实如此。我已经编辑了我的原始问题以包含此图像。
标签: java selenium-webdriver kotlin appium ui-testing