我希望我能清楚地解释我要问的问题 - 如果还没有明确的话,请耐心等待。
当涉及视图层次结构中隐藏在其他顶部视图后面的视图时,我遇到了UI测试的障碍。我知道XCUIElement
个对象具有我们可以利用的exists
和isHittable
接口,但这些接口并没有帮助我试图断言当一个元素在一个模糊的背后隐藏时认为它阻止了它。
任何人都知道如何正确断言这个?
答案 0 :(得分:1)
我认为不幸的答案是“你做不到”。 XCUITest无法告诉您是否在屏幕上显示某些内容(或者某些内容位于UI视图的前景中)。但是,当您在视图上绘制视图时,您可以将userInteractionEnabled
设置为false,否则您的应用代码就会表明用户无法访问它;然后,您的代码可以声明该元素不是enabled
。
这可能会产生积极的副作用,消除与按钮交互的竞争条件,同时隐藏它的视图将被覆盖在其上。
您也可以简单地断言隐藏您声明的元素的元素的存在是否被遮挡,或者您可以选择使用CGRect的逻辑来声明UI视图被绘制在您希望不再可见的UI上元素完全掩盖了它。
答案 1 :(得分:0)
exists()
的一个奇怪的行为是,即使元素不在屏幕上,它也会返回true
。你必须跳过一些箍来确保元素实际上对用户可见。
为了测试元素实际在屏幕上,我们可以断言元素的框架包含在窗口的框架中。
let window = app.windows.elementBoundByIndex(0)
let element = app.buttons["On"]
XCTAssert(CGRectContainsRect(window.frame, element.frame))
答案 2 :(得分:0)
我会使用hittable()来确保它是可操作的