自定义控件uiautomation不可见(自定义控件怎么使用)
uiautomationviewer怎么启动
1.你的第一个UIAutomation测试脚本UIAutomation的功能测试代码是用Javascript编写的。UIAutomation和Accessibility有着直接的关系,你将用到通过标签和值的访问性来获得UI元素,同时完成相应的交互操作。下面让我们来编写我们的第一段测试代码。使用iOS模拟器1.下载示例应用程序TestAutomation.xcodeproj,并打开它。这个项目是一个很简单的包含2个tab的tabbar应用程序。2.确保选中如下图所示的“TestAutomationiPhone5.0Simulator”模式(或许你已经切换成5.1了,因此它可能是iPhone5.1模拟器)。3.启动Instruments(ProductProfile),或者通过?I。4.选择左边的iOSSimulator,然后再选择Automation模板,然后点击“Profile”。5.Instruments就已经启动好后,然后直接开始录制了。这里先停止录制,(红包按钮或者?R)。6.在左边的Scripts窗口,点击“AddCreate”创建新的脚本。7.在脚本编辑器里,输入下面的代码vartarget=UIATarget.localTarget();varapp=target.frontMostApp();varwindow=app.mainWindow();target.logElementTree();clip_image007[4]8.重新运行这段脚本?R(不需要保存)。脚本跑起来后,你可以在日志打完后停止它。clip_image009[4]赞一个!我们就这样完成了我们的第一个UIAutomation测试用例。使用iOS设备你除了将你的测试用例运行模拟器上,也可以将它运行在一个真实的设备上。不过,自动化测试用例只能运行在支持多任务的:iPhone3GS,iPad,iOS4.0等设备上。遗憾的是不管iPhone3G的系统版本是什么,都不支持。下面是如何操作:1.通过USB接口连接上你的iPhone。2.选择“TestAutomationiOSDevice”模式。3.确保Developperprofile设置成Release模式(而不是Ad-HocDistributionprofile)。默认情况下,profiling是设置成Release模式的(因为没有必要将profile设置成Debug模式)。4.启动测试5.后面的步骤请参考前面模拟器部分。2.处理UIAElement和元素可访问性(Accessibility)UIAElement层次结构Accessibility和UIAutomation有密切的联系:如果一个控件的Accessibility是可以被访问的,你就可以设置和读取它的值,作相关的操作,而当一个控件的Accessibility不可见时,你就没有法通过automation访问它。你可以通过InterfaceBuilder,或者通过在程序里设置isAccessibilityElement属性的方式来设置一个控件的Accessibility或者可被自动化。当你设置containerview(即:一个视图包含其它的UIKit元素)的accessibility时,你必须注意。你设置了整个View的accessibility将会“隐藏”它的子视图的accessibility,例如:在示例项目中,你不能将outlet视图设置成可访问的,否则它所有的子控件将都不可以访问了。在任何时候,logElementTree都是你忠实的朋友:它将当前界面的所有可被访问的元素都打印在日志里。每一个可以被访问的UIKit控件都可以用一个Javascript对象来描述,它就是一个UIAElement。UIAElement有几个属性:name,value,elements,parent。你的主窗口包含很多的控件,它们是以UIKit层次的方式定义的,这些UIKit层次结构对应的是UIAElement的层次树。例如:前面的测试代码中,通过调用logElementTree,我们可以得到如下面所示的树结构:+-UIATarget:name:iPhoneSimulatorrect:{{0,0},{320,480}}|+-UIAApplication:name:TestAutomationrect:{{0,20},{320,460}}||+-UIAWindow:rect:{{0,0},{320,480}}|||+-UIAStaticText:name:FirstViewvalue:FirstViewrect:{{54,52},{212,43}}|||+-UIATextField:name:UserTextvalue:TapSomeTextHere!rect:{{20,179},{280,31}}|||+-UIAStaticText:name:Thetextis:value:Thetextis:rect:{{20,231},{112,21}}|||+-UIAStaticText:value:rect:{{145,231},{155,21}}|||+-UIATabBar:rect:{{0,431},{320,49}}||||+-UIAImage:rect:{{0,431},{320,49}}||||+-UIAButton:name:Firstvalue:1rect:{{2,432},{156,48}}||||+-UIAButton:name:Secondrect:{{162,432},{156,48}}clip_image001[6]你可以通过下面的代码来访问文本框:vartextField=UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];你可以选择通过从0开始的索引或者这个元素的名称来访问这个元素,例如:你也可以通过下面的代码来访问文本控件。vartextField=UIATarget.localTarget().frontMostApp().mainWindow().textFields()["UserText"];后一种方式更加清晰明了,应该多使用。你可以通过InterfaceBuilder设置UIAElement的name属性,clip_image002[6]或者通过编写代码的方式:myTextField.accessibilityEnabled=YES;myTextField.accessibilityLabel=@"UserText";你现在可以看到,通过accessibility属性可以被UIAutomation用来找到不同的控件。这非常的清晰,因为,第一,你只要学习一个测试框架;第二,通过编写自动化测试代码,你同时还可以保证你的程序是可以被访问的。因此,每一个UIAElement对象的子控件可以通过下面的方法进行访问:buttons(),images(),scrollViews(),textFields(),webViews(),segmentedControls(),sliders(),staticTexts(),switches(),tabBar(),tableViews(),textViews(),toolbar(),toolbars()等等……你可以通过如下代码在tabbar上访问第一个tab:vartabBar=UIATarget.localTarget().frontMostApp().tabBar();vartabButton=tabBar.buttons()["First"];UIAElement结构层次非常的重要,你以后会常常用到它。而且你还要记住,你可以在随时通过调用UIAAplication的logElementTree来获得它的结构。UIATarget.localTarget().frontMostApp().logElementTree();在模拟器上,你还可以激活Accessibility的检测器。启动模拟器,找到“SettingsGeneralAccessibilityAccessibilityInspector”,然后将它设为“打开”状态。这个彩色的小框框就是Accessibility检测器了。当它来的时候,Accessibility就被关闭了,当它的时候,Accessibility就是打开的。你只要点击上面的箭头按钮就可以激活或者屏蔽Accessibility。现在,打开我们的示例程序,激活检测器。然后,点击文本框,检查UIAElement的name和value属性(其实就是accessibilityLabel和accessibilityValue对应的NSObject类型的值)。这个检测器可以帮助你调试和编写你的测试代码。模拟用户操作让我们更进一步,模拟一些用户的交互操作。你可以简单地调用按钮的tap()来作一个点击操作:vartabBar=UIATarget.localTarget().frontMostApp().tabBar();vartabButton=tabBar.buttons()["First"];//Tapthetabbar!tabButton.tap();你还可以调用UIAButtons的doubleTap(),twoFingerTap()。如果你不想操作具体的某个元素,你也可以直接根据屏幕上指定的坐标点进行操作,你可以这么用:UIATarget.localTarget().tap({x:100,y:200});UIATarget.localTarget().doubleTap({x:100,y:200});UIATarget.localTarget().twoFingerTap({x:100,y:200});UIATarget.localTarget().pinchOpenFromToForDuration({x:20,y:200},{x:300,y:200},2);UIATarget.localTarget().pinchCloseFromToForDuration({x:20,y:200},{x:300,y:200},2);拖拽与划动:UIATarget.localTarget().dragFromToForDuration({x:160,y:200},{x:160,y:400},1);UIATarget.localTarget().flickFromTo({x:160,y:200},{x:160,y:400});注意,当你指定操作的时间间隔的时候,它是有特定的范围的,即:拖拽操作的时间间隔必须大于或者等于0.5秒,小于60秒。现在,让我们来练习一下:停止Instruments(?R)在Scripts窗口里,移除当前的脚本点击“AddImport”然后选择TestAutomation/TestUI/Test-1.js(将下面的代码保存到这个路径)点击录制按钮(?R)然后看看将会发生什么…下面是Test-1.js代码:vartestName="Test1";vartarget=UIATarget.localTarget();varapp=target.frontMostApp();varwindow=app.mainWindow();UIALogger.logStart(testName);app.logElementTree();//--selecttheelementsUIALogger.logMessage("Selectthefirsttab");vartabBar=app.tabBar();varselectedTabName=tabBar.selectedButton().name();if(selectedTabName!="First"){tabBar.buttons()["First"].tap();}//--taponthetextfielsUIALogger.logMessage("Taponthetextfieldnow");varrecipeName="UnusuallyLongNameforaRecipe";window.textFields()[0].setValue(recipeName);target.delay(2);//--taponthetextfielsUIALogger.logMessage("Dismissthekeyboard");app.logElementTree();app.keyboard().buttons()["return"].tap();vartextValue=window.staticTexts()["RecipeName"].value();if(textValue===recipeName){UIALogger.logPass(testName);}else{UIALogger.logFail(testName);}这段脚本先启动待测程序,然后,如果第一个tab没有被选的话就切换到第一个tab,并将上面的文本框的值设成“UnusuallyLongNameforaRecipe”,接着虚拟键盘。这里有一些新的方法值得注意的:UIATarget的delay(NumbertimeInterval)方法允许你在两个操作之间做一些等待,UIALogger的logMessage(Stringmessage)方法用来将你想打印的信息输出到日志上去,UIALogger的logPass(Stringmessage)方法指明你的测试脚本已经成功的完成测试了。你还知道了如何访问键盘上的按钮,然后作点击操作:app.keyboard().buttons()["return"].tap();

使命召唤19ui不见了
使命召唤19ui不见了原因是设置了隐藏。使命召唤19ui设置可见的方法如下:
1、打开电脑,登录使命召唤,其次点击进入到游戏界面,在点击右闭芦上角的设置键。
2、找到最底下的一个自定义设置,点击进去,可找到自定义的操作页面。
3、在设置离关闭隐缓19ui,即可。
打开用户帐户时,出现Automation 服务器不能创建对象,这是怎么回事?
是不是打开控制面板里的用户帐户时出的问题啊?
给你说几个方法解决。
第1种方法:
这种情况需指定正确的模块,而模块信息是在注册表的某键值中指定的,请安装下面步骤来操作:-1、单击『开始』菜单中的“运行”并键入“regedit”后单击“确定”启动“注册表编辑器”; 2、在“注册表编辑器”中展开至HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}\InProcServer32j(/
3、在右侧中的“(默认)”键值确保键值内容为
%SystemRoot%\system32\SHELL32.dll
第2种方法:
1、单击『开始』菜单中的“运行”并键入“regedit”后单击“确定”按钮启动“注册表编辑器”;
2、在“注册表编辑器”中展开至
HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}\InProcServer32
3、在右侧中的“(默认)”键值确保键值内容为
C:\Windows\system32\wshom.ocx
(如果你的操作系统并非在C盘,请根据实际情况操作。)
以上2件事做完后再:
运行中输入如下:
regsvr32 jscript.dll
regsvr32 vbscript.dll
修正后重启计算机。
单击“开始/运行”,输入“rundll32 netplwiz.dll,UsersRunDll”,按回车键后弹出“用户帐户”窗口,看清楚,这可跟“控制面板”中打开的“用户账户”面板窗口不同哦!然后取消选定“要使用本机,用户必须输入用户名和密码”选项,单击确定,在弹出的对话框中输入你想让电脑每次自动登录的账户和密码即可
开始——运行,分别输入下列命令,修复一下
regsvr32 nusrmgr.cpl
regsvr32 mshtml.dll
regsvr32 jscript.dll
regsvr32 /i shdocvw.dll
regsvr32 sxs.dll
1.你可以右击我的电脑(不是快捷方式),选择“管理”里面有本地用户和组,可以进行帐户操作
2.工具-选项-查看,选择不缓存缩略图,然后开始-搜索“Thumbs.db”全部文件和文件夹(包括隐藏的文件、文件夹),这个是缩略图的故障,删除了全部的文件就好
权限的问题
在开始菜单下按运行 输入CMD打开
输入内容
net localgroup administrators 这里填你要提升权限的用户名 /add
这样就可以了
在自动化测试中控件不能识别怎么办
1、如果是因为自动化测试工具的限制,比如对于WinForm的控件,有些自动化工具就不能识别,碰到这种情况,最好是看这个工具有没有扩展可以用,比如 Silktest的。Net Framework扩展。如果不行,那只能换自动化测试工具了。所以这个凸显出在做自动化测试以前,选择自动化测试工具的重要性。
2、如果是因为控件比较复杂,自动化工具可以识别,但是无法操作。这时我们可以通过Window API以及消息的方式来做,比如自己去调Window API来操作窗口,或者请开发实现一下消息的接口来给自动化工具调用等
3、跟开发沟通,让他们的控件支持IAccessible接口,然后我们通过MSAA来操作(如果是WPF控件,则需要实现UIAutomation定义的一些接口)。不过一般情况下,除了微软这样对软件的Accessible要求很高的公司,其它公司很少会花费时间来实现这个接口……。 另外扯一句,产品的Accessible的程度,实质上决定了一个公司能对产品做自动化测试的程度。
4、如果以上方法都不行,那只有最后一个双刃剑可以用了,就是鼠标键盘模拟。理论上来说,只要用户可以操作的东西,只要有界面,就可以通过鼠标键盘模拟来实现(君不见N多游戏外挂的键盘鼠标模拟大法)。就如双刃剑一样,这种做法是杀敌一千,自损八百。因为鼠标键盘模拟非常依赖于当前激活的窗口以及光标位置和焦点位置,而且同步起来很困难。这也造成了后期维护成本很高。
如何使用UIAutomation进行iOS自动化测试
使用iOS设备
你除了将你的测试用例运行模拟器上,也可以将它运行在一个真实的设备上。不过,自动化测试用例只能运行在支持多任务的:iPhone 3GS,iPad,iOS 4.0等设备上。遗憾的是不管iPhone 3G的系统版本是什么,都不支持。
下面是如何操作:
1)通过USB接口连接上你的iPhone。
2)选择 “TestAutomation iOS Device”模式。
3)确保Developper profile设置成Release模式(而不是Ad-Hoc Distribution profile)。默认情况下,profiling是设置成Release模式的(因为没有必要将profile设置成Debug模式)。
4)启动测试 (?I)
5)后面的步骤请参考前面模拟器部分。
2、处理UIAElement和元素可访问性(Accessibility)
UIAElement层次结构
Accessibility和UIAutomation有密切的联系:如果一个控件的Accessibility是可以被访问的,你就可以设置和读取它的值,作相关的操作,而当一个控件的Accessibility不可见时,你就没有办法通过automation访问它。
你可以通过Interface Builder,或者通过在程序里设置isAccessibilityElement属性的方式来设置一个控件的Accessibility或者可被自动化。当你设置container view(即:一个视图包含其它的UIKit元素)的accessibility时,你必须注意。你设置了整个View的accessibility将会“隐藏”它的子视图的accessibility,例如:在示例项目中,你不能将outlet视图设置成可访问的,否则它所有?