任何人都可以提供一个示例,说明如何直接从UIautomation JavaScript测试中发出http GET请求,或者如何从我的UIautomation JavaScript测试中调用shell脚本?
FWIW,UIautomation运行时中缺少所有浏览器提供的大多数核心对象.例如,尝试使用XMLhttpRequest,您将收到一个异常报告,它无法找到该变量.
谢谢!
解决方法 伙计们,我能够通过向iOS客户端发送http请求来处理并在UIAlertVIEw中返回结果来解决这个问题.请注意,所有iOS代码修改都包含在#if DEBUG条件编译指令中.
首先,设置您的客户端,以便在设备震动时发送通知. Read this post for more information.
接下来,在您的iOS主应用程序委托中添加以下代码:
[[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(deviceShakenShowDeBUG:) name:@"DeviceShaken" object:nil];
然后添加一个看起来像这样的方法:
- (voID) deviceShakenShowDeBUG:(ID)sender{ if (!self.textFIEldEnterDeBUGArgs) { self.textFIEldEnterDeBUGArgs = [[[UITextFIEld alloc] initWithFrame:CGRectMake(0,260.0,25.0)] autorelease]; self.textFIEldEnterDeBUGArgs.accessibilityLabel = @"AlertDeBUGArgsFIEld"; self.textFIEldEnterDeBUGArgs.isAccessibilityElement = YES; [self.textFIEldEnterDeBUGArgs setBackgroundcolor:[UIcolor whitecolor]]; [self.tabbarController.selectedVIEwController.vIEw addSubvIEw:self.textFIEldEnterDeBUGArgs]; [self.tabbarController.selectedVIEwController.vIEw bringSubvIEwToFront:self.textFIEldEnterDeBUGArgs]; } else { if ([self.textFIEldEnterDeBUGArgs.text length] > 0) { if ([self.textFIEldEnterDeBUGArgs.text hasPrefix:@"http://"]) { [self doDeBUGhttpRequest:self.textFIEldEnterDeBUGArgs.text]; } } }}- (voID)requestDIDFinishLoad:(TTURLRequest*)request{ Nsstring *response = [[[Nsstring alloc] initWithData:((TTURLDataResponse*)request.response).data enCoding:NSUTF8StringEnCoding] autorelease]; UIAlertVIEw *resultAlert = [[[UIAlertVIEw alloc] initWithTitle:NSLocalizedString(@"Request Loaded",@"") message:response delegate:nil cancelbuttonTitle:NSLocalizedString(@"OK",@"") otherbuttonTitles:nil] autorelease]; resultAlert.accessibilityLabel = @"AlertDeBUGResult"; [resultAlert show];}
此代码将在摇动后向顶部视图控制器添加UITextFIEld,在任何导航栏或其他UI元素上方拍打. UIautomation或您的用户可以手动在此UITextFIEld中输入URL.当您再次摇动设备时,如果文本以“http”开头,它将在代码中发出http请求(练习让读者实现doDeBUGhttpRequest).
然后,在我的UIautomation JavaScript文件中,我定义了以下两个函数:
function httpGet(url,delayInSec) { if (!delayInSec) delay = 1; var alertDeBUGResultSeen = false; var httpResponseValue = null; UIATarget.onAlert = function onAlert(alert) { httpResponseValue = alert.staticTexts().toArray()[1].name(); alert.buttons()[0].tap(); alertDeBUGResultSeen = true; } var target = UIATarget.localTarget(); var application = target.frontMostApp(); target.shake(); // bring up the input fIEld application.mainWindow().textFIElds()["AlertDeBUGArgsFIEld"].setValue(url); target.shake(); // send back to be processed target.delay(delayInSec); assertTrue(alertDeBUGResultSeen); return httpResponseValue;}function httpGetJsON(url,delayInSec) { var response = httpGet(url,delayInSec); return eval('(' + response + ')');}
现在,在我的JavaScript文件中,我可以打电话
httpGet('http://localhost:3000/do_something')
它将执行http请求.如果我想从服务器返回JsON数据,我打电话
var JsonResponse = httpGetJsON('http://localhost:3000/do_something')
如果我知道这将是一个长时间通话,我打电话
var JsonResponse = httpGetJsON('http://localhost:3000/do_something',10 /* timeout */)
我已经成功使用这种方法已有好几周了.
总结以上是内存溢出为你收集整理的从iOS UIAutomation发出JavaScript中的同步HTTP GET请求或调用shell脚本全部内容,希望文章能够帮你解决从iOS UIAutomation发出JavaScript中的同步HTTP GET请求或调用shell脚本所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)