起因:
在 iOS 端,使用 appium 的 driver.page_source 方法,获取当前页面的页面结构时,出现了以下错误:

XCTRunner[7782]: Enqueue Failure: UI Testing Failure - Failure fetching attributes for element <XCAccessibilityElement: 0x6000002533e0> Device element: Error Domain=XCTestManagerErrorDomain Code=13 "Error copying attributes -25202" UserInfo={NSLocalizedDescription=Error copying attributes -25202} <unknown> 0 1

然后就开始调研,发现社区里也有同学遇到了相似问题:https://testerhome.com/topics/6396

同时找到了一个比较靠谱的原因:https://github.com/facebook/WebDriverAgent/issues/316 ,是一个 WDA 的 issue 问题:https://github.com/facebook/WebDriverAgent/issues/372

现在想和各位咨询一下,是否还有其他方案可以获取当前页面的 page_source?

备注:
目前了解到的方案 1:通过 UIAutomation 脚本,UIATarget.localTarget.logElementTree() 来获取。---目前采用 XCUITest,该方案目测不可行。

@xdf @seveniruby @Lihuazhang @Anikikun @xubin98246

谢谢!

目前一种解决方案,有同学验证已经 OK 了,我这里采用相同方案,依然有问题,大家可以试试:
方案为:

1.找到 XCUIElement+FBIsVisible.m。具体地址为:

/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m

或者

/User/xxxx/.nvm/versions/node/v6.3.0/lib/node_modules/.appium_npminstall/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m

2.将 fb_isVisible 方法进行修改,具体调整为:

- (BOOL)fb_isVisible
{
  return !CGRectIsEmpty(self.frame) && !CGRectIsEmpty(self.visibleFrame) && (CGRectIntersectsRect(self.visibleFrame, self.application.frame) || ((self.application.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.application.interfaceOrientation == UIInterfaceOrientationLandscapeRight) && self.application.frame.size.height > self.application.frame.size.width && CGRectIntersectsRect(self.visibleFrame, CGRectMake(0, 0, self.application.frame.size.height, self.application.frame.size.width))));
  // return !CGRectIsEmpty(self.frame) && !CGRectIsEmpty(self.visibleFrame);
}

祝各位好运。


↙↙↙阅读原文可查看相关链接,并与作者交流