Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOSÓ¦ÓÃUI×Ô¶¯»¯²âÊÔͼÎĹ¥ÂÔ
 
×÷Õߣºclose_martyÀ´Ô´£ºCSDN ·¢²¼ÓÚ 2015-03-16
  4204  次浏览      28
 

iOSµÄ×Ô¶¯»¯²âÊÔ¿ò¼Ü¿É·ÖΪÁ½ÖÖ£º×¢ÈëʽºÍ·Ç×¢Èëʽ¡£×¢ÈëʽµÄ¿ò¼Üͨ³£»áÌṩһЩLib»òÕßÊÇFramework£¬ÒªÇó²âÊÔÈËÔ±ÔÚ´ý²âÓ¦ÓõĴúÂ빤³ÌÖе¼ÈëÕâЩÄÚÈÝ£¬¿ò¼Ü¿ÉÒÔͨ¹ýËûÃÇÍê³É¶ÔappµÄÇý¶¯£¬µäÐ͵ıÈÈçmonkeytalk¡£·Ç×¢ÈëʽµÄ¿ò¼ÜÔòÊÇͨ¹ýÆ»¹ûÌṩµÄinstruments¹¤¾ß£¬µ÷Óùٷ½µÄ½Ó¿Úº¯Êý£¬ÊµÏÖ¶ÔappµÄÏà¹Ø²Ù×÷£¬µäÐ͵ľÍÊÇuiautomation£¬appium

Çø±ð£º

×¢Èëʽ£º¿É»ñÈ¡appÄÚµÄÊý¾Ý£»¿É²Ù×÷¿Õ¼ä´ó£¬²»Êܹٷ½ÏÞÖÆ£»¿ÉÔÚwindowsƽ̨½øÐвâÊÔ£»µ«ÊÇÐèÒªÔÚ´ý²âÏîÄ¿ÖÐÔö¼ÓµÚÈý·½µÄ²¿·Ö£¬Ê¹µÃ²âÊÔµÄÄÚÈݺÍʵ¼Ê·¢²¼µÄÄÚÈݲ¢²»Ò»ÖÂ

·Ç×¢Èëʽ£º´ý²âÄÚÈݺÍ×îÖÕµÄÉÏÏßÄÚÈݱ£³ÖÒ»Ö£»²âÊÔÎÞÐèÔ´Â룻µ«ÊÇÊܹٷ½ÏÞÖÆ£¬Ò»Ð©¹¦ÄÜÎÞ·¨ÊµÏÖ£¬¶øÇÒ»·¾³ÒªÇó±ØÐëʹÓÃos xƽ̨µÄXcode¡£

²ÉÓÃinstrumentsµÄÔ­Òò£º

1. ²âÊÔ¹¤¾ßºÍ²âÊÔÎĵµ¾ùÓÉÆ»¹û¹Ù·½Î¬»¤

2. ÎÞÐè¶îÍâǰÖù¤×÷£¬¿ÉÒÔÖ±½Ó¶ÔÌá²âµÄapp½øÐвâÊÔ

3. Ö§³ÖÂ¼ÖÆ

1. »·¾³

mac:

OS X

Xcode-instruments

ÆäÖУ¬Xcodeͨ¹ýmacÉϵÄApp store¼´¿ÉÖ±½Ó°²×°Ê¹Óã¬instrumentsΪXcode×Ô´øµÄ¹¤¾ß¼¯£¬ÎÞÐèµ¥¶ÀÏÂÔØ

iPhone/iPad:

´ý²âapp

ÆäÖУ¬´ý²âappÈç¹ûÊÇÔËÐÐÔÚÕæ»úÉÏ£¬ÔòÒ»¶¨ÐèÒªÓÿª·¢ÕßÖ¤ÊéÇ©Ãû£¬²ÉÓ÷¢²¼Ö¤Êé»òÕßÊÇÆóÒµÖ¤Êé´ò°üµÄÓ¦ÓÃÎÞ·¨ÓÃÒÔÕæ»ú²âÊÔ¡£

2. ×¼±¸¹¤×÷ for Õæ»ú

1£©ÊÖ¶¯°²×°Ó¦Óõ½iPhoneÉÏ£¬²¢Á¬½ÓiPhoneµ½mac¡£

PS:Èç¹û¸ÃÉ豸ÊǵÚÒ»´ÎÁ¬½ÓÕą̂mac£¬ÐèÒªµÈ´ýorganizerÍê³Éʶ±ðºÍͬ²½¹¤×÷²ÅÄÜʹÓá£

PPS:Èç¹ûorganizerûÓÐ×Ô¶¯Æô¶¯£¬¿ÉÒÔͨ¹ýXcode->window->organizer£¬ÊÖ¶¯Æô¶¯¸Ã³ÌÐò¡£

2£©Æô¶¯instruments¹¤¾ß¼¯£¬²¢Ñ¡ÔñAutomation£¬½øÈë²âÊÔ¹¤¾ßµÄÖ÷½çÃæ

Æô¶¯·½Ê½£º´ò¿ªXcode£¬Ñ¡ÔñXcode->Open DeveloperTool->Instruments

PS:Æô¶¯instrumentsÖ®ºó£¬¿ÉÒÔÔÚÏ·½Doce²Ëµ¥ÖУ¬Ñ¡ÖÐinstrumentsµÄͼ±ê£¬ÓÒ¼üÑ¡ÔñÔÚDockÖб£Áô£¬±ãÓÚÏ´οì½ÝÆô¶¯¸Ã¹¤¾ß£¬²»ÓÃÿ´Î¶¼È¥Æô¶¯Xcode¡£

3. ×¼±¸¹¤×÷ for Ä£ÄâÆ÷

·½Ê½Ò»£º´ÓÔ´ÂëÖ±½ÓÆô¶¯instruments£¬ÊÊÓÃÓÚÓÐÔ´´úÂ빤³ÌµÄÇé¿ö¡£

1) Ë«»÷*.xcodeproj Îļþ´ò¿ª¹¤³Ì

2) ÔÚXcodeÖУ¬Ñ¡ÔòProduce->Profile£¬¸ÃÃüÁî»áÊ×ÏÈbuildÕû¸ö¹¤³Ì£¬Ôڳɹ¦Ö®ºó£¬×Ô¶¯Æô¶¯instruments¹¤¾ß¼¯£¬È»ºóÊÖ¶¯Ñ¡ÔñAutomation¹¤¾ß¼´¿É¡£

·½Ê½¶þ£ºÊ¹ÓÃÒѾ­±àÒëÍê³ÉµÄ²¢ÇÒ¿ÉÓÃÓÚÄ£ÄâÆ÷ÔËÐеÄ*.appÎļþ£¬ÓÐÎÞÔ´Âë¾ù¿É

1) ÊÖ¶¯Æô¶¯instruments¹¤¾ß¼¯²¢½øÈëAutomation£¬Ñ¡Ôñ´ý²âµÄ*.appÎļþ¼´¿É

PS:ÔËÐÐÓÚÄ£ÄâÆ÷ºÍÕæ»úµÄ³ÌÐòÐèÒª²ÉÓò»Í¬µÄ·½Ê½½øÐбàÒ룬²»ÄÜͨÓõġ£Æ½Ê±µÄÌá²â°ü¶¼ÊÇÓÃÓÚÕæ»úÔËÐеģ¬ÎÞ·¨ÔÚÄ£ÄâÆ÷ÔËÐС£

2) Èç¹ûÓÐÔ´Â룬¿ÉÒÔÔÚÑ¡ÔñÄ£ÄâÆ÷ºÍ¶ÔÓ¦µÄiOS°æ±¾Ö®ºó£¬Ö±½ÓRunµ½Ä£ÄâÆ÷ÖУ¬È»ºóÔÚÐèÒª²âÊÔʱ£¬Í¨¹ýAutomationÑ¡Ôñµ½Ä£ÄâÆ÷Ŀ¼ÏµĸÃappÎļþÒ²¿ÉÒÔ¡£

Ä£ÄâÆ÷ÖеÄÓ¦ÓÿÉÒÔÔÚÕâ¸ö·¾¶ÏÂÃæÕÒµ½£º

/Users/Óû§Ãû/Library/Application Support/iPhone Simulator/iOS°æ±¾/Applications/

¸Ã·¾¶ÏÂÔØ¾ÍÊÇÄ£ÄâÆ÷ÖеÄÒѰ²×°µÄËùÓÐÓ¦ÓóÌÐò£¬ÕÒµ½´ý²âÊÔµÄ*.app¼´¿É¡£

ĿǰÎÒ²âÊÔµÄÊÇÒ»¿éÊÓÆµÓ¦Ó㬲¥·ÅÆ÷µ×²ãµÄһЩ¿âÔËÐÐÔÚÄ£ÄâÆ÷ÉÏ»áÓÐÎÊÌ⣬ËùÒÔÎҵĺóÃæµÄËùÓÐÄÚÈݶ¼ÒÔÔËÐÐÓÚÕæ»úµÄ»·¾³Îª×¼¡£

4. ´ÓÂ¼ÖÆ¿ªÊ¼

1) Ñ¡Ôñ´ý²âÊÔµÄÓ¦Óá£

ÔÚ×óÉÏ·½µÄchoose targetÉϵã»÷£¬Ñ¡Ôñµ±Ç°Á¬½ÓµÄÉ豸£¬ÒÔ¼°¸ÃÉ豸ÉÏÒѰ²×°µÄ´ý²âÊÔapp

2) ¾Û½¹µ½scriptÇøÓò£¬µã»÷¸ÃÇøÓòÏ·½µÄºìÉ«°´Å¥

Èç¹ûÉÏÒ»²½Ñ¡ÔñµÄÉ豸ºÍappÕýÈ·µÄ»°£¬¾Í¿ÉÒÔ¿´µ½iPhone»òÕßiPadÉϵÄÓ¦Óñ»Æô¶¯ÆðÀ´ÁË£¨Èç¹û֮ǰ¾ÍÒѾ­Æô¶¯ÁË£¬Automation¹¤¾ß»áÏȽáÊøµôÉ豸ÉϵĽø³Ì²¢ÖØÐÂÆô¶¯£©

Ó¦ÓÃÆô¶¯Íê³ÉÖ®ºó£¬¾ÍÕýʽ¿ªÊ¼Â¼ÖÆÄ£Ê½ÁË£¬´ËʱÔÚÕæ»úÉ϶ÔÓ¦ÓýøÐеÄÈκβÙ×÷£¬¶¼»á±»Â¼ÖƳɽű¾µÄÐÎʽÏÔʾÔÚscriptÇøÓò¡£ÓÉÓÚÓû§²Ù×÷ºÍ½Å±¾Â¼ÖÆÍ¬Ê±ÔÚ½øÐУ¬ËùÒÔ´ËʱµÄ²Ù×÷ͨ³£¶¼»á³ÊÏÖ³öÏìÓ¦Âý»òÕß¿¨¶ÙƵ·±µÄÇé¿ö¡£

ÏÂÃæÕâ¶ÎÊǵǼÕʺÅaÈ»ºó×¢ÏúÕʺŵÄһϵÁвÙ×÷µÄÂ¼ÖÆ½á¹û

µã»÷Í£Ö¹°´Å¥£¬ÖÕÖ¹Â¼ÖÆ¹ý³Ì£¬È»ºóµã»÷»Ø·Å°´Å¥£¬¿ªÊ¼»Ø·ÅÒѾ­Â¼ÖƺõĽű¾£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Ó¦ÓÃÖØÆô²¢Ö´ÐÐ֮ǰµÄһϵÁвÙ×÷¡£

µ½Ä¿Ç°ÎªÖ¹£¬¶Ô²Ù×÷µÄÂ¼ÖÆ¾ÍËã»ù±¾Íê³ÉÁË£¬ÔÚscriptÇøÓòÓÒ¼üexport¼´¿ÉÒÔµ½´¦Â¼ÖƵÄjs½Å±¾¡£ÐèÒªµÄʱºò£¬Ôڽű¾¹ÜÀíÇøÓòscriptsͨ¹ýµã»÷add->ImportµÄ·½Ê½£¬µ¼Èëjs½Å±¾²¢ÔËÐм´¿É¡£

µ«ÊÇÉÏÃæµÄ½Å±¾´æÔںܶàÎÊÌâ¡£

1) ½Å±¾ÖÐÓÐÒ»ÐÐÂÌÉ«µÄÌáʾÐÅÏ¢£º//Alert detected¡­¡­

2) ʵ¼ÊÖ´ÐлᷢÏÖ×îºóÒ»ÐдúÂë»á³ö´í¡£

3) Èç¹ûwifiµÄÍøÂç×´¿ö²»ÊǺÜÎȶ¨£¬Õâ¶Î½Å±¾»ù±¾¶¼»áÒÔʧ°Ü¸æÖÕ¡£

4) ÿÐдúÂë¶¼ºÜ³¤£¬²¢ÇÒ²»ÀûÓÚÔĶÁ

5) ûÓмì²éµãµÄ²âÊԽű¾¶¼ÊÇÔÚË£Á÷Ã¥

ÕâЩÎÊÌ⣬ÎÒÃÇÔÚ½ÓÏÂÀ´Ò»Ò»½â¾ö¡£

5. ×Ô¼º¶¯ÊÖ£¬·áÒÂ×ãʳ

Â¼ÖÆµÄ´úÂë¿Éά»¤ÐԺͽ¡×³ÐÔ¶¼ºÜ²î£¬²¢ÇÒȱÉÙ±ØÒªµÄ¼ì²éµã£¬ËùÒÔʵ¼ÊЧ¹û·Ç³£²î¡£Õâʱ¾ÍÐèÒª×Ô¼º±àд²âÊÔ´úÂ룬²ÉÓð´Ðè¶¨ÖÆµÄ·½Ê½À´ÊµÏÖ×Ô¶¯»¯¡£

Ê×ÏÈÒ»¶¨Òª¼ÇסÕâ¸öµØÖ·£º

https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/UIAutomationRef/_index.html

ÕâÊÇÆ»¹û¹Ù·½µÄ²Î¿¼Îĵµ£¬ÁоٳöÁËUI Automation JavaScript libraryµÄËùÓÐÀ࣬¶ÔappµÄ¸÷¸ö²Ù×÷×îÖÕ¶¼ÊÇͨ¹ýÕâЩapiÀ´ÊµÏֵġ£

×Ô¶¯»¯µÄ³£¼û²½Öèͨ³£ÊÇÈý²½£º¶¨Î»£¬²Ù×÷£¬¼ì²é

1) ¶¨Î»ÔªËØ

UIAutomationͨ¹ý²ã¼¶·ÃÎʵķ½Ê½£¬¶¨Î»µ½Ä³Ò»¸ö¾ßÌåÔªËØ¡£Æ»¹ûÌṩÁËÒ»¸ölogElementTree()µÄ·½·¨£¬´òÓ¡¿Ø¼þÊ÷¡£ÔÚн¨µÄ²âÊԽű¾ÖУ¬¼ÓÈëÏÂÃæÕâÐдúÂ룺

Target.logElementTree();

Ö´ÐÐÕâ¶Î´úÂ루µã»÷×óÉϽǵĺìÉ«°´Å¥£©£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÊäÈëÁËÏÂÃæµÄ¶«Î÷

¡¾½ØÍ¼¡¿

ÉÏͼ¾ÍÊÇÕû¸öappµÄUI²ã¼¶½á¹¹£¬µ±ÄãÐèÒª¶¨Î»µ½Ä³¸öÔªËØµÄʱºò£¬¿ÉÒÔ°´ÕÕÕâ¸ö²ã¼¶Ò»²ãÒ»²ãµÄÍùÏ·ÃÎÊ£¬Ö±µ½Ä¿±êÔªËØ¡£±ÈÈçÐèÒª¶¨Î»µ½²¥·Å¼Ç¼¡£

var target= UIATarget.localTarget();

var app =target.frontMostApp();

var window= app.mainWindow();

//½øÈëµÇ½½çÃæ

varloginButton = window.scrollViews()[0].buttons()["Çëµã»÷µÇ¼"];

ÆäÖÐ:

UIATarget ¶ÔÏó´ú±í´ý²âÓ¦ÓÃËùÔÚ»·¾³µÄ×î¸ß²ã¼¶UI,ÔÚÕâÀïlocalTarget()±íʾÔËÐÐappµÄÕą̂iPhoneÉ豸

UIAApplication¶ÔÏó´ú±íapp²ã¼¶µÄUI£¬ÕâÀïͨ¹ýfrontMostApp()·½·¨µÃµ½µÄ¶ÔÏ󣬾ÍÊÇÖ¸ÕýÔÚÔËÐеÄÓ°ÒôiPhone app¡£

UIAWindow¶ÔÏó´ú±íappÖÐwindow²ã¼¶µÄUI,ÕâÀïͨ¹ýmainWindow()·½·¨µÃµ½µÄ¶ÔÏó£¬Ö¸µ±Ç°appÖеÄÖ÷´°Ì壬һ¸öappµÄµ±Ç°½çÃæÍ¨³£Ö»»áÓÐÒ»¸öÖ÷´°Ìå¡£

ʵ¼ÊÏîÄ¿ÖУ¬²»Í¬ÔªËصIJîÒì¶¼ÊÇ´Ówindow²ã¼¶¿ªÊ¼µÄ£¬ÔÚwindow²ã¼¶ÍùÉÏ£¬¶¼ÊÇÒ»ÑùµÄ¡£

2) ²Ù×÷ÔªËØ

ÉÏÃæÒ»²¿Íê³É¾ÍÒѾ­¿ÉÒÔ×öµ½ÔªËصĶ¨Î»£¬ÏÖÔÚÐèÒª¶ÔÕâ¸öÔªËØ½øÐвÙ×÷£¬×î³£¼ûµÄ¾ÍÊÇtap

loginButton.tap();

¶ÔÓÚ²»Í¬µÄÔªËØ£¬ÌṩµÄ¾ßÌå²Ù×÷·½·¨»á´æÔÚ²îÒ죬ÏêÇéÐè²Î¿¼¹Ù·½Îĵµ¡£½øÈëµÇ¼½çÃæºó£¬ÐèÒª³öÈëÕʺÅÃÜÂ룬ҲÊÇͬÑùµÄ²½Ö裺

//¶¨Î»ÊäÈë¿ò

varnameField = window.textFields()[0];

varpwField = window.secureTextFields()[0];

//²Ù×÷

nameField.setValue("1@1.pp");

pwField.setValue("ppp111");

//µã»÷Ö´Ðеǽ

window.buttons()["loginlogin button"].tap();

3) ¼ì²é½á¹û

²Ù×÷Íê³Éºó£¬ÐèÒª¼ì²é½á¹ûÊÇ·ñ·ûºÏÔ¤ÆÚ¡£

if(window.scrollViews()[0].staticTexts()[0].name() == "Çë½ÐÎÒÀ×·æ"){

      UIALogger.logPass("²âÊÔͨ¹ý");

}else{

      UIALogger.logMessage(window.scrollViews()[0].staticTexts()[0].name());

      UIALogger.logFail("²âÊÔʧ°Ü");

}

ÉÏÊöµÄÕ⼸¸ö²½Ö裬¾ÍËãÍê³ÉÁËUIAutomationµÄhello world£¬µ«ÊÇÇ°ÃæÅ׳öµÄÎÊÌⲢûÓÐÍêÈ«½â¾ö¡£

6. Öð¸ö»÷ÆÆ

1£©ÑÓ³Ù

ÉÏÃæÕâ¶Î´úÂ룬ÔÚʵ¼ÊÔËÐÐʱ£¬»ù±¾ÊÇ»áÒ»Ö±²âÊÔʧ°ÜµÄ£¬Ô­ÒòÊÇ´Ó¿ªÊ¼µÇ¼£¬µ½Õ¹Ê¾Óû§ÐÅÏ¢£¬ÐèÒªÒ»¶¨µÄʱ¼ä£¬µã»÷µÇ¼°´Å¥²Ù×÷Ö®ºó£¬Á¢¿ÌÈ¥ÅжÏÓû§ÐÅÏ¢Ò²¾ÍÒ»¶¨»áʧ°ÜµÄ¡£ÁíÍâ£¬ÍøÂ粨¶¯£¬»òÕßÊÇapp/²âÊÔ»ú¿ÉÄܳöÏֵĿ¨¶Ù£¬ÊÇÔì³É²âÊԽű¾µÄƵ·±Ê§°ÜµÄÔ­ÒòÖ®Ò»£¬Òò´ËÎÒÃÇÐèҪijЩ²Ù×÷Ö®ºó£¬ÈËΪÔö¼ÓһЩ±ØÒªµÄÑÓ³Ù£¬µÈ´ý²Ù×÷µÄÍê³É£¬´Ó¶øÔöÇ¿´úÂëµÄÎȶ¨ÐÔ¡£Æ»¹ûÔÚtarget²ãÌṩÁËÒ»¸ö·½·¨delay(Number timeInterval),¸Ã·½·¨ÓÃÓÚÑӳٽű¾µÄÖ´ÐУ¬ÎÒÃÇ¿ÉÒÔÔÚ±ØÒªµÄµØ·½Ôö¼Ó¸Ã·½·¨¡£

target.delay(3);

2£©µ¯¿ò

µ¯¿òalertÔÚiOSÖбȽÏÌØÊâµÄÀàÐÍ£¬Ëü²»ÊôÓÚapp²ã¼¶µÄ£¬Ò²²»ÄÜÏñ²Ù×÷ÆÕÍ¨ÔªËØÒ»ÑùÈ¥²Ù×÷alert£¬Æ»¹ûÌṩÁËÒ»¸öרÃŵĴ¦Àí·½·¨£¬UIATarget.onAlert,µ±µ¯¿ò³öÏÖʱ£¬²âÊÔÒýÇæ»á×Ô¶¯µ÷ÓÃÕâ¸ö·½·¨À´´¦Àíµ¯¿ò¡£

¡¾´ýÍêÉÆ¡¿

3£©Log

UIALoggerÖ÷Òª¾ÍÓÃÓÚÊä³ö¸÷ÖÖÀàÐ͵ÄÈÕÖ¾¡£°üÀ¨logStart£¬logPass£¬logFail£¬logMessage£¬logDebug£¬logWarning £¬logError

ǰÈý¸öͨ³£ÓÃÀ´Çø·ÖÒ»¸ö²âÊÔÓÃÀý£¬logstart±íʾһ¸ö²âÊԵĿªÊ¼£¬Ö±µ½logPass»òÕßÊÇlogFailΪֹ¡£ºóËĸöÓÃÒÔÔÚ²âÊÔ¹ý³ÌÖÐÊäÈ벻ͬ¼¶±ðµÄÈÕÖ¾¡£

7. tuneupjs

tuneupjsÊÇÒ»¸öÓÃÒÔÓÅ»¯uiautomationµÄµÚÈý·½js¿â£¬ÍøÕ¾µØÖ·: http://www.tuneupjs.org/

1£©²âÊÔÓÃÀý

TuneupjsÌṩÁËtest·½·¨£¬ÓÃÒÔ±íʾһ¸ö²âÊÔÓÃÀý£¬¸Ã·½·¨ÓÐÁ½¸ö²ÎÊý£º²âÊÔÓÃÀýµÄÃû³ÆºÍÒ»¸ö²âÊÔÄÚÈݵÄfunction£¬ÔÚÕâ¸ö·½·¨ÖУ¬ÄãÎÞÐëʹÓÃlogStart£¬logPass£¬logFailÕâÒ»ÀàµÄ·½·¨£¬TuneupjsÒѾ­ÔÚtest·½·¨µÄʵÏÖÖУ¬×öÁËÏàÓ¦µÄ´¦Àí£¬Ò»¸ötest·½·¨¾Í¶ÔÓ¦Ò»Ìõ²âÊÔÓÃÀý£¬µ±Õâ¸ötest·½·¨ÖеÄfunctionÕý³£µÄÖ´ÐÐÍê±Ï£¬Õâ¸öcase¾Í»á±äΪpass£¬Èç¹ûÖ´Ðйý³ÌÖÐÓÐÈκÎÒì³£Å׳ö£¬test¾Í»áÍ£Ö¹²¢°ÑÕâ¸öcaseÖÃΪfail¡£

test("µÇ¼²âÊÔ",function(target,app){

      app.tabBar().buttons()[2].tap();

      var loginButton =window.scrollViews()[0].buttons()["Çëµã»÷µÇ¼"];

       //Èç¹ûÒѵǼÔòÏÈ×¢ÏúÕ˺Å

      if (!loginButton.isVisible()) {

            window.scrollViews()[0].buttons()[1].tap();

            window.buttons()["Í˳öµÇ¼"].tap();

            target.delay(1);

      }

      //Èç¹ûδµÇ¼ÔòÖ´ÐеǼ

      if (loginButton.isVisible()) {

            log("µÇ¼ÕʺÅ*****");

            loginButton.tap();

            var nameField =window.textFields()[0];

            var pwField =window.secureTextFields()[0];

            nameField.setValue("*****"); //ÕʺÅ

            pwField.setValue("*****");  //ÃÜÂë

            window.buttons()["login loginbutton"].tap();

            target.delay(3);

      }   

      assertEquals(window.scrollViews()[0].staticTexts()[0].name(),"Çë½ÐÎÒÀ×·æ","µÇ¼ʧ°Ü");

});

²ÉÓÃtest·½·¨À´×éÖ¯²âÊÔÓÃÀýÓÐÒ»¸öºÜÃ÷ÏԵĺô¦£¬¸Ã·½·¨ÒѾ­×öºÃÁËÒì³£µÄ´¦Àí£¬³öÏÖµÄÈκÎÒì³£¶¼»á±»µ±Ç°ËùÔÚµÄtest·½·¨²¶»ñµ½£¬¶ø²»»á°ÑÒì³£Å׸ø×îÉϲ㣬±ÜÃâÁËÒ»µ©³öÏÖÒì³£¾Í»áµ¼ÖÂÕû¸ö²âÊÔÍ£Ö¹Ö´ÐеÄÇé¿ö¡£Ò»¸ötestʧ°ÜÖ®ºó£¬²»»áÓ°ÏìÏÂÒ»¸ötestµÄÖ´ÐС£

2£©¶ÏÑÔ

ÕâÊÇTuneupjsµÄÓÖÒ»¸öÓÅÊÆ£¬ËüÌṩÁËһϵÁеĶÏÑÔ·½·¨£¬¿ÉÒÔÓÃÒÔ¶Ô²âÊÔ½á¹û½øÐÐÅжϣ¬²¢ÇÒÔÚ¶ÏÑÔʧ°Üʱ×Ô¶¯½ØÍ¼±£´æ£¬»ù´¡µÄ¶ÏÑÔ·½·¨°üÀ¨assertEquals assertNotEquals assertTrue assertFalse assertNull assertNotNullµÈ£¬ÔÚÒ»¸ötestÖУ¬Ò»µ©³öÏÖ¶ÏÑÔʧ°Ü£¬ÕâÌõÓÃÀý¾Í»á±äΪfail״̬¡£

3£©Retry·½·¨

ÕâÊÇÒ»¸öÖØÊÔ·½·¨£¬ÅäºÏ¶ÏÑÔʹÓÃЧ¹û¸ü¼Ñ¡£retry()µÄ±ØÒª²ÎÊý¾ÍÊÇÒ»¸öfunction£¬Èç¹ûfunctionÖгöÏÖÁ˶ÏÑÔʧ°Ü£¬»òÕßÊÇÓÐÒì³£Å׳ö£¬¸Ã·½·¨»áÔٴγ¢ÊÔÖ´ÐÐÕâ¸öfunction£¬Ö±µ½functionµÄÄÚÈÝÈ«²¿Í¨¹ý»òÕßÊÇ×îÖÕ³¬Ê±¡£Ä¬ÈϵÄÖØÊÔ´ÎÊýÊÇ3´Î£¬Ã¿´ÎÖØÊÔ¼ä¸ô0.5Ã룬¿ÉÒÔΪretry()·½·¨ÉèÖõڶþºÍµÚÈý¸ö²ÎÊýÀ´ÐÞ¸ÄÕâÁ½¸öÖµ¡£retry()·½·¨±Èµ¥´¿µÄʹÓùٷ½µÄdelay()·½·¨Òª¸ü¼ÓºÏÀí¡£

retry(function(){

      assertEquals(window.scrollViews()[0].staticTexts()[0].name(),"Çë½ÐÎÒÀ×·æ","µÇ¼ʧ°Ü");

},5,1);

4£©Test·½·¨ÖÐÊÖ¶¯Å׳öÒì³£

ÓÐʱºò³öÓÚÐèÒª£¬ÎÒÃÇÐèÒªÔÚij¸ö²âÊÔÓÃÀýÖÐÊÖ¶¯Å׳öÒì³££¬ÈÃÓÃÀýʧ°Ü£¬¿ÉÒÔʹÓÃtuneupÌṩµÄfail(message)·½·¨£¬Ò²¿ÉÒÔ×Ô¼ºÖ±½ÓÅ×Òì³£throw(exception)£¬test·½·¨²¶»ñÒì³£Ö®ºó»áÈÏΪµ±Ç°µÄÓÃÀýʧ°Ü£¬Ìø³ö²¢Ö´ÐÐÏÂÒ»ÌõÓÃÀý¡£

5£©ÃüÁîÐÐÆô¶¯UIAutomation

UIAutomation±¾ÉíÊÇÖ§³ÖÃüÁîÐÐÆô¶¯µÄ£¬Ò²¼´·ÇguiµÄģʽ¡£µ«ÊÇÔ­ÉúµÄÃüÁî·Ç³£µÄÈß³¤£¬Tuneupjs¶ÔÏà¹ØµÄÃüÁî×öÁË·â×°£¬²ÉÓÃÁË×Ô¼ºµÄrunner£¬²¢ÇÒÖ§³ÖÊä³öxml¸ñʽµÄ²âÊÔ½á¹û£¬¿ÉÒÔÓÃÓÚjenkinsµÈ³ÖÐø¼¯³É¹¤¾ß¡£

./UI_Test/alexvollmer-tuneup_js-5a4346d/test_runner/runiCloudPlayIPhone  UI_Test/login.js

test-Result/-x ¨Ca 5

-x ±íʾÊä³öÒ»·Ýxunit¸ñʽµÄxml

-a 5 ±íʾÆô¶¯instrumentsʧ°ÜÖ®ºó£¬ÖØÊÔÆô¶¯µÄ´ÎÊý

   
4204 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ