Created
February 20, 2018 18:31
-
-
Save lokeshchdhry/ff5be17580b2c4333604e4ada8ef2e1d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[DEBUG] : [Nexus 6P] NetworkSecurityConfig: No Network Security Config specified, using platform default | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,934 [main][26] equals ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/, false | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,968 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/bootstrap.yeti.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,970 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/sfs.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,972 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/jquery.1.11.0.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,973 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/bootstrap.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,975 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/pnotify.custom.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,975 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/clipboard.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,994 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/social-likes.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,995 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/bootbox.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,996 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/chosen.jquery.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,996 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/sfs.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,997 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/vendor/jquery.ui.widget.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,997 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/jquery.iframe-transport.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,998 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/js/jquery.fileupload.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:02,998 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,026 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/font-awesome.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,026 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/jquery.dataTables.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,027 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/pnotify.custom.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,027 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/bootstrap-tagsinput.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,027 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/chosen.bootstrap.min.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,027 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/css/social-likes_classic.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,041 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,700italic,400,300,700 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,048 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,051 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/download-android.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,054 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/ChromeWebStore.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,059 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/img/cloud.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,063 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/img/upload.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,065 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/img/megaphone.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,069 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/img/hourglass.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,072 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://static.addtoany.com/menu/page.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,196 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.11 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,238 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUuhpKKSTjw.woff2 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,239 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://expirebox.com/fonts/fontawesome-webfont.woff2?v=4.7.0 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,239 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVZ0bf8pkAg.woff2 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,239 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOUuhpKKSTjw.woff2 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,239 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhrIqOxjaPX.woff2 | |
[INFO] : [Nexus 6P] I/TiWebChromeClient.console: (main) [1780,2227] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/. (4:https://expirebox.com/js/jquery.1.11.0.min.js) | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,329 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F....ID 0,0-1440,2112 #3}, https://expirebox.com/js.vars.php | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,635 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://static.addtoany.com/menu/sm.17.html#type=page&event=load&url=https%3A%2F%2Fexpirebox.com%2F&referrer= | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,660 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://static.addtoany.com/menu/svg/icons.26.svg.js | |
[INFO] : [Nexus 5] I/TiWebChromeClient.console: (main) [2213,2784] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/. (4:https://expirebox.com/js/jquery.1.11.0.min.js) | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,811 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/impression.php/f33dc138813485/?lid=115&payload=%7B%22source%22%3A%22jssdk%22%7D | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,820 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.google-analytics.com/ga.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:03,821 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://staticxx.facebook.com/connect/xd_arbiter/r/lY4eZXm_YWu.js?version=42#channel=f1d80ba81e1f8d8&origin=https%3A%2F%2Fexpirebox.com | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,188 [main][26] The anchor reference for https://expirebox.com/ is null and the query string is null | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,189 [main][26] onPageFinished ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/ : injecting as it is file/http protocol. Reload JS? false Page started loading? false | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,189 [main][26] Loading and evaluating all TTW scripts | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,211 [main][26] Base64 : LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiAg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: Q29weXJpZ2h0IDIwMTMtMjAxNCBTT0FTVEEsIEluYy4KKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K | |
[DEBUG] : [Nexus 6P] TouchTestDriver: KiAgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbC4KKgoqICBGaWxlOiAgVFRXLmpzCioKKioq | |
[DEBUG] : [Nexus 6P] TouchTestDriver: KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp3aW5kb3cu | |
[DEBUG] : [Nexus 6P] TouchTestDriver: dHRyX2luaXRpYWxpemVkID0gZmFsc2U7CmlmICghd2luZG93LlRUV19PcHRpb25zKQp7CiAgVFRX | |
[DEBUG] : [Nexus 6P] TouchTestDriver: X09wdGlvbnMgPSB7fTsKfQpUVFcgPSB7fTsKClRUVy5sb2cgPSBmdW5jdGlvbihtc2cpCnsKICB3 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: aW5kb3cudG9wLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSAidHRsb2c6Ly8iICsgZW5jb2RlVVJJ | |
[DEBUG] : [Nexus 6P] TouchTestDriver: Q29tcG9uZW50KG1zZyk7Cn0KLy8gV2UncmUgZ29pbmcgdG8gbmVlZCBKU09OLnN0cmluaWZ5LCBz | |
[DEBUG] : [Nexus 6P] TouchTestDriver: byBtYWtlIHN1cmUgbm8gb25lIGhhcyB0YW1wZXJlZCB3aXRoIGl0Lgp0dEpTT04gPSB3aW5kb3cu | |
[DEBUG] : [Nexus 6P] TouchTestDriver: SlNPTjsKaWYgKHR0SlNPTi5zdHJpbmdpZnkudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29k | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ZSIpID09IC0xKSAgICAgIAp7CiAgLy8gU29tZW9uZSBoYXMgb3ZlcndyaXR0ZW4gd2luZG93LkpT | |
[DEBUG] : [Nexus 6P] TouchTestDriver: T04uc3RyaW5pZnkgKHd3dy5jbm4uY29tISkuICBDcmVhdGUgYW4gaWZyYW1lIHRvCiAgLy8gZ2V0 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: IHRoZSBuYXRpdmUgSlNPTiBvYmplY3QgYmFjay4KICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3Jl | |
[DEBUG] : [Nexus 6P] TouchTestDriver: YXRlRWxlbWVudCgiaWZyYW1lIik7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUp | |
[DEBUG] : [Nexus 6P] TouchTestDriver: OwogIGlmcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgaWZyYW1lLnN0eWxlLnBv | |
[DEBUG] : [Nexus 6P] TouchTestDriver: c2l0aW9uID0gImFic29sdXRlIjsKICBpZnJhbWUuc3R5bGUud2lkdGg9IjFweCI7CglpZnJhbWUu | |
[DEBUG] : [Nexus 6P] TouchTestDriver: c3R5bGUuaGVpZ2ggPSAiMXB4IjsKICB0dEpTT04gPSBpZnJhbWUuY29udGVudFdpbmRvdy5KU09O | |
[DEBUG] : [Nexus 6P] TouchTestDriver: OyAgICAgICAKfQoKZnVuY3Rpb24gdHRfb25sb2FkKGUpCnsKIC8vIFdoZW4gdGhlIGlmcmFtZSBp | |
[DEBUG] : [Nexus 6P] TouchTestDriver: cyByZS1sb2FkZWQsIHdlIHJlbW92ZSB0aGUgaGFzVEREIGF0dHJpYnV0ZSBzbyB0aGF0IHRoZSBz | |
[DEBUG] : [Nexus 6P] TouchTestDriver: Y3JpcHQgd2lsbCBhZ2FpbgogLy8gYmUgaW5qZWN0ZWQuCiBlLnRhcmdldC5yZW1vdmVBdHRyaWJ1 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: dGUoImhhc1RURCIpOwp9CgovL1RoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgVFRXIHdpbGwgY2Fs | |
[DEBUG] : [Nexus 6P] TouchTestDriver: bCBkdXJpbmcgd2ViVmlld0RpZEZpbmlzaExvYWQgd2hlbiB0aGUgVUlXZWJWaWV3IGFscmVhZHkg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: aGFzIFRUVyBzY3JpcHRzIGluIGl0LgovL1dlIGRvbid0IGtub3cgd2hpY2ggZnJhbWUgaXQgaXMg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: dGhhdCBsb2FkZWQsIGJ1dCB0aGVyZSBoYXMgdG8gYmUgYSBmcmFtZSBzb21ld2hlcmUgdGhhdCBo | |
[DEBUG] : [Nexus 6P] TouchTestDriver: YXMganVzdCBsb2FkZWQgYW5kIGRvZXNuJ3QKLy95ZXQgaGF2ZSBUVEQgaW4gaXQuICBXZSBhbHNv | |
[DEBUG] : [Nexus 6P] TouchTestDriver: IGNhbGwgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIFRUV0F1dG9tYXRpb24uc2NyaXB0IGlu | |
[DEBUG] : [Nexus 6P] TouchTestDriver: IGNhc2UgdGhlIGZyYW1lIGxvYWQgYmVmb3JlCi8vdGhlIG1haW4gZG9jdW1lbnQgaGFzIFRURCBp | |
[DEBUG] : [Nexus 6P] TouchTestDriver: bmplY3RlZC4KZnVuY3Rpb24gdHRfaW5qZWN0SW5TdWJmcmFtZXMoKQp7ICAKICB2YXIgaWZyYW1l | |
[DEBUG] : [Nexus 6P] TouchTestDriver: cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUiKTsKICBmb3IgKHZhciBp | |
[DEBUG] : [Nexus 6P] TouchTestDriver: PTA7IGk8aWZyYW1lcy5sZW5ndGg7ICsraSkKICB7CiAgICB2YXIgaWZyYW1lID0gaWZyYW1lc1tp | |
[DEBUG] : [Nexus 6P] TouchTestDriver: XTsKICAgIHR0X2luamVjdEluRnJhbWUoaWZyYW1lKTsKICB9Cn0KCmZ1bmN0aW9uIHR0X2luamVj | |
[DEBUG] : [Nexus 6P] TouchTestDriver: dEluRnJhbWUoaWZyYW1lKQp7ICAKICAvL1RoaXMgaXMgIHRoZSBzY3JpcHQgdGhhdCBpcyBldmFs | |
[DEBUG] : [Nexus 6P] TouchTestDriver: J2QgaW4gdGhlIHRvcCBBVVQgZG9jdW1lbnQncyBpZnJhbWVzLgogIHZhciBzY3JpcHQgPSAidHJ5 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: IiArIAogICAgICAgICAgICAgICAieyIgKyAKICAgICAgICAgICAgICAgICAgInZhciBzayA9IGRv | |
[DEBUG] : [Nexus 6P] TouchTestDriver: Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOyIgKyAKICAgICAgICAgICAgICAgICAgInNr | |
[DEBUG] : [Nexus 6P] TouchTestDriver: LnNyYyA9ICd0dHc6Ly9Ub3VjaFRlc3RXZWJJbm5lckZyYW1lU2NyaXB0c19fQ29tYmluZWQuanMn | |
[DEBUG] : [Nexus 6P] TouchTestDriver: OyIgKyAKICAgICAgICAgICAgICAgICAgInNrLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsiICsg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: CiAgICAgICAgICAgICAgICAgICJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNrKTsiICsgCiAg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ICAgICAgICAgICAgICAifSIgKyAKICAgICAgICAgICAgICAgICJjYXRjaChlKSIgKyAKICAgICAg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ICAgICAgICAgICJ7IiArIAogICAgICAgICAgICAgICAgICAvLyJhbGVydChcIlRUVyBpbmplY3Qg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ZmFpbGVkIGJlY2F1c2U6IFwiICsgZS5tZXNzYWdlKSIgKyAKICAgICAgICAgICAgICAgICJ9OyI7 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: CiAgdHJ5CiAgewogICAgaWYgKGlmcmFtZS5nZXRBdHRyaWJ1dGUoImhhc1RURCIpID09IG51bGwp | |
[DEBUG] : [Nexus 6P] TouchTestDriver: CiAgICB7CiAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykKICAgICAgewogICAgICAgIGlm | |
[DEBUG] : [Nexus 6P] TouchTestDriver: IChpZnJhbWUuY29udGVudFdpbmRvdy5ldmFsICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: aWZyYW1lLmNvbnRlbnRXaW5kb3cuZXZhbChzY3JpcHQpOyAKICAgICAgICAgIGlmcmFtZS5zZXRB | |
[DEBUG] : [Nexus 6P] TouchTestDriver: dHRyaWJ1dGUoImhhc1RURCIsICJ0cnVlIik7CiAgICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ZW5lcigibG9hZCIsIHR0X29ubG9hZCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ICAgICB7CiAgICAgICAgICAvL2FsZXJ0KCJub24tdGVzdGFibGUgZnJhbWUgZGV0ZWN0ZWQiKTsK | |
[DEBUG] : [Nexus 6P] TouchTestDriver: ICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgLy9hbGVydCgibm8g | |
[DEBUG] : [Nexus 6P] TouchTestDriver: Y29udGVudFdpbmRvdyIpICAKICAgICAgfQogICAgfQogIH0KICBjYXRjaCAoZSkgCiAgewogICAg | |
[DEBUG] : [Nexus 6P] TouchTestDriver: Ly9hbGVydCgiZXhjZXB0aW9uIGluIGlmcmFtZS5ldmFsOiAiICsgZSArICIgY29udGVudFdpbmRv | |
[DEBUG] : [Nexus 6P] TouchTestDriver: dzogIiArIGlmcmFtZS5jb250ZW50V2luZG93ICsgIiAgZXZhbDogIiArIGlmcmFtZS5jb250ZW50 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: V2luZG93LmV2Y | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,214 [main][26] Decoded from base64 : 13 scripts | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,215 [main][26] /**************************************************** Copyright 2013-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTW.js****************************************************/window.ttr_initialized = false;if (!window.TTW_Options){ TTW_Options = {};}TTW = {};TTW.log = function(msg){ window.top.document.location.href = "ttlog://" + encodeURIComponent(msg);}// We're going to need JSON.strinify, so make sure no one has tampered with it.ttJSON = window.JSON;if (ttJSON.stringify.toString().indexOf("native code") == -1) { // Someone has overwritten window.JSON.strinify (www.cnn.com!). Create an iframe to // get the native JSON object back. var iframe = document.createElement("iframe"); document.body.appendChild(iframe); iframe.style.visibility = "hidden"; iframe.style.position = "absolute"; iframe.style.width="1px"; iframe.style.heigh = "1px"; ttJSON = iframe.contentWindow.JSON; }function tt_onload(e){ // When the iframe is re-loaded, we remove the hasTDD attribute so that the script will again // be injected. e.target.removeAttribute("hasTTD");}//This is the function that TTW will call during webViewDidFinishLoad when the UIWebView already has TTW scripts in it.//We don't know which frame it is that loaded, but there has to be a frame somewhere that has just loaded and doesn't//yet have TTD in it. We also call this function at the end of TTWAutomation.script in case the frame load before//the main document has TTD injected.function tt_injectInSubframes(){ var iframes = document.getElementsByTagName("iframe"); for (var i=0; i<iframes.length; ++i) { var iframe = iframes[i]; tt_injectInFrame(iframe); }}function tt_injectInFrame(iframe){ //This is the script that is eval'd in the top AUT document's iframes. var script = "try" + "{" + "var sk = document.createElement('script');" + "sk.src = 'ttw://TouchTestWebInnerFrameScripts__Combined.js';" + "sk.type = 'text/javascript';" + "document.head.appendChild(sk);" + "}" + "catch(e)" + "{" + //"alert(\"TTW inject failed because: \" + e.message)" + "};"; try { if (iframe.getAttribute("hasTTD") == null) { if (iframe.contentWindow) { if (iframe.contentWindow.eval != null) { iframe.contentWindow.eval(script); iframe.setAttribute("hasTTD", "true"); iframe.addEventListener("load", tt_onload, true); } else { //alert("non-testable frame detected"); } } else { //alert("no contentWindow") } } } catch (e) { //alert("exception in iframe.eval: " + e + " contentWindow: " + iframe.contentWindow + " eval: " + iframe.contentWindow.eval + " window.eval: " + window.eval); }}TTW.init = function(){ if (!window.ttr_initialized) { try { window.ttr_initialized=true; window.tt_ra=[]; TTW_addListeners(); TTW.LocatorBuilders = new TTW_locatorBuilders(); TTW.ElementFinders = new TTW_elementFinders(); window.tta_WaitHandler=null; window.tta_initialized=true; window.tta_currentWindow=window; tt_injectInSubframes(); } catch (e) { //alert("Exception in TTW.init: " + e.message); window.setTimeout(TTW.init, 1000); return "TTW.init Trying again... typeof TTW_addListeners: " + (typeof TTW_addListeners); } return "TTW.init SUCCEEDED"; }}TTW.iframeInit = function(){ if (!window.ttr_initialized) { try { window.ttr_initialized=true; TTW_addListeners(); window.tta_WaitHandler=null; window.tta_initialized=true; window.tta_currentWindow=window; tt_injectInSubframes(); } catch (e) { //alert("Exception in TTW.iframeInit: " + e.message); window.setTimeout(TTW.iframeInit, 1000); return "TTW.iframeInit | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,219 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: elementFinders.js****************************************************/function TTW_elementFinders() { this.idAttrs = ["data-test-id","datatestid"]; this.finders = {}; this.filterFunctions = {}; this.filterFunctions.name = function(name, elements) { var selectedElements = []; for (var i = 0; i < elements.length; i++) { if (elements[i].name === name) { selectedElements.push(elements[i]); } } return selectedElements; } this.filterFunctions.value = function(value, elements) { var selectedElements = []; for (var i = 0; i < elements.length; i++) { if (elements[i].value === value) { selectedElements.push(elements[i]); } } return selectedElements; } this.filterFunctions.index = function(index, elements) { index = Number(index); if (isNaN(index) || index < 0) { alert("Illegal Index: " + index); } if (elements.length <= index) { alert("Index out of range: " + index); } return [elements[index]]; } this.locateElementByDomTraversal = function(locator, inDocument, inWindow) { alert("todo locateElementByDomTraversal"); } this.finders["implicit"] = function(locator, inDocument, inWindow, bReturnFirst) { if (locator.indexOf('//') == 0) { return this.finders["xpath"].call(this, locator, inDocument, inWindow, bReturnFirst); } if (locator.indexOf('document.') == 0) { return this.locateElementByDomTraversal(locator, inDocument, inWindow); } return this.finders["id"].call(this, locator, inDocument, inWindow) || this.finders["name"].call(this, locator, inDocument, inWindow) || null; } this.finders["id"] = function(locator, doc, win) { for (var i=0; i<this.idAttrs.length; ++i) { var elem = TTW.findElement("//*[@" + this.idAttrs[i] + "=\"" + locator + "\"]"); if (elem != null) return elem; } return doc.getElementById(locator); } this.finders["link"] = function(locator, doc, win) { var links = doc.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { var element = links[i]; if (locator == element.textContent) { return element; } } return null; } this.finders["name"] = function(locator, doc, win) { return this.locateElementByName(locator, doc); } this.selectElementsBy = function(filterType, filter, elements) { var filterFunction = this.filterFunctions[filterType]; if (!filterFunction) { return null; //alert("Unrecognised element-filter type: '" + filterType + "'"); } return filterFunction(filter, elements); } this.selectElements = function(filterExpr, elements, defaultFilterType) { var filterType = (defaultFilterType || 'value'); // If there is a filter prefix, use the specified strategy var result = filterExpr.match(/^([A-Za-z]+)=(.+)/); if (result) { filterType = result[1].toLowerCase(); filterExpr = result[2]; } return this.selectElementsBy(filterType, filterExpr, elements); } this.locateElementByName = function(locator, document, inWindow) { var elements = document.getElementsByTagName("*"); var filters = locator.split(' '); filters[0] = 'name=' + filters[0]; while (filters.length) { var filter = filters.shift(); elements = this.selectElements(filter, elements, 'value'); } if (elements.length > 0) { return elements[0]; } return null; } this.finders["text"] = function(locator, doc, win, bReturnFirst) { var elem = this.finders["xpath"].call(this,"//*[starts-with(text(), \"" + locator + "\")]", doc, win, false); var textProperty = "textContent"; if (!elem) { elem = this.finders["xpath"].call(this,"//input[starts-with(@value, \"" + locator + "\")]", doc, win, false); textProperty = "value"; } if (Array | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,221 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: findElement.js****************************************************/TTW.findAllElements = function(locator) { return TTW.findElement(locator, true);}TTW.findElement = function(locator, bReturnArray) { this.findElementRecursive = function(strategy, locator, index, inDocument, inWindow, bReturnFirst) { // Try finding the element in the given window var element = null; try { if (index > 0) { var elems = TTW.ElementFinders.findElementBy(strategy, locator, inDocument, inWindow, false); element = elems && elems.length > index ? elems[index] : null; } else { element = TTW.ElementFinders.findElementBy(strategy, locator, inDocument, inWindow, bReturnFirst); } } catch (e) { tt_log("Exception in findElementRecursive: " + e, "info"); } if (element != null) { return element; } // Continue looking in frames var frames = null; try { frames = inWindow.frames; } catch (e) { tt_log("findElementRecursive exception getting inWindow.frames: " + e, "info"); } for (var i = 0; i < frames.length; i++) { var doc = null; try { doc = frames[i].document; } catch (e) { tt_log("findElementRecursive exception getting frames[i].document: " + e, "info"); } if (doc && frames[i] && doc != null && frames[i] != null) { element = this.findElementRecursive(strategy, locator, index, doc, frames[i], bReturnFirst); if (element != null) { return element; } } } return null; } this.strategyCanHaveIndex = function(strategy) { return strategy == "tagname"; } this.stringStartsWith = function(string, prefix) { // If string is something like "name=Mukul\nAte\nA\nBagel", then checks to see if prefix (i.e. // name, text, link) will match the first n characters of "string", where n is the prefix length. return string.slice(0, prefix.length) == prefix; } this.locatorHasStrategy = function(string) { var builders = TTW.getLocatorBuilders(); for (var i=0; i<builders.length; i++) { // Loops through all the different types of locators that are supported (name, link, text) and whichever // one matches is the strategy type if (this.stringStartsWith(string, builders[i])) { return builders[i]; } } return null; } this.findElementOrNull = function(locator, win, bReturnFirst) { var strategy; var index = 0; // If there is a locator prefix, use the specified strategy strategy = this.locatorHasStrategy(locator); if (strategy) { // Remove the strategy followed by the expected "=". For example, // "text=MoogleWasHere" will become "MoogleWasHere". locator = locator.slice(strategy.length + 1); if (this.strategyCanHaveIndex(strategy)) { // pick the [] off the locator var result = locator.match(/\[(.*?)\]/); if (result) { locator = locator.substring(0,locator.indexOf("[")); index = result[1]; } } } else { // No strategy defined, implied strategy of xpath, document, id, or name. strategy = 'implicit'; } //alert("strategy: " + strategy + " loc: " + locator + " index: " + index); return this.findElementRecursive(strategy, locator, index, win.document, win, bReturnFirst); } var win = window.tta_currentWindow ? window.tta_currentWindow : window; return this.findElementOrNull(locator, win, (bReturnArray != true));} | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,222 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: getLocator.js****************************************************//** * tt_getLocator * * elem - the element to build a locator for * strategy (optional) - the specific strategy to use. */eLocStrategies = { DEFAULT : "default", ID : "id", ISSE : "isse", NAME : "name", LINK : "link", TEXT : "text", TAGNAME : "tagname", XPATH_1 : "xpath_1", XPATH_POSITION : "xpath_position", XPATH_ID : "xpath_id", XPATH_CLASSNAME : "xpath_classname"}function TTLocator(){ this.selected; this.locators = {}; this.xpathLocators = {}; this.shortLocator = null;}TTLocator.prototype.initWithJsonString = function(locator){ var loc = null; if (typeof locator == "object") { loc = locator; } else { if (locator.indexOf("{") == 0 && locator.indexOf("{%%") != 0) loc = eval('(' + locator + ')'); else this.shortLocator = locator; } if (loc != null) { this.selected = loc.selected; this.locators = loc.locators; this.xpathLocators = loc.locators.xpath; }}TTLocator.prototype.requiresPrefix = function(strategy){ strategy = strategy.toLowerCase(); return !this.isXpathStrategy(strategy) && strategy != "isse" && strategy != "default" && strategy != "xpath_1";}TTLocator.prototype.isXpathStrategy = function(strategy){ strategy = strategy.replace("xpath.", ""); return strategy == eLocStrategies.XPATH_POSITION || strategy == eLocStrategies.XPATH_ID || strategy == eLocStrategies.XPATH_CLASSNAME || strategy == eLocStrategies.XPATH_1; }TTLocator.prototype.serializeShort = function(){ if (this.shortLocator) return this.shortLocator; if (this.isXpathStrategy(this.selected)) return this.xpathLocators[this.selected.replace("xpath.", "")]; else return (this.requiresPrefix(this.selected) ? this.selected + "=" : "") + this.locators[this.selected];}TTW.getLocatorBuilders = function(){ return ["id", "name", "link", "text", "xpath_id", "xpath_classname", "xpath_position", "tagname"];}TTW.getLocator = function(elem, strategy) { this.locators = {} this.xpathLocators = {} this.selected = eLocStrategies.DEFAULT; this.requiresPrefix = function(strategy) { strategy = strategy.toLowerCase(); return !this.isXpathStrategy(strategy) && strategy != "isse" && strategy != "default" && strategy != "xpath_1"; } this.isXpathStrategy = function(strategy) { strategy = strategy.replace("xpath.", ""); return strategy == eLocStrategies.XPATH_POSITION || strategy == eLocStrategies.XPATH_ID || strategy == eLocStrategies.XPATH_CLASSNAME || strategy == eLocStrategies.XPATH_1; } this.serializeShort = function() { if (this.isXpathStrategy(this.selected)) return this.xpathLocators[this.selected.replace("xpath.", "")]; else return (this.requiresPrefix(this.selected) ? this.selected + "=" : "") + this.locators[this.selected]; } this.serialize = function() { if (this.selected) { // Add the xpath locators to the locators dictionary this.locators["xpath"] = this.xpathLocators; var json = {"selected": (this.isXpathStrategy(this.selected) ? "xpath." : "") + this.selected, "locators": this.locators}; return ttJSON.stringify(json); } else { return null; } } this.exactMatchPattern = function(string) { if (string != null && (string.match(/^\w*:/) || string.indexOf('?') >= 0 || string.indexOf('*') >= 0)) return "exact:" + string; else return string; } this.addLocator = function(locator, finderName) { if (this.selected == eLocStrategies.DEFAULT) this.selected = finderName; if (this.isXpathStrategy(finderName)) this.xpathLocators[finderName] = locator; else this.locators[finderName] = locator; } this.buildAll = function(e, bReturnFirst) { | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,225 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: locatorBuilders.js****************************************************/function TTW_locatorBuilders() { this.idAttrs = ["data-test-id","datatestid"]; this.builders = {}; this.builders["id"] = function(e) { return this.getLocatorId(e); }; this.getLocatorId = function(e) { for (var i=0; i<this.idAttrs.length; ++i) { if (e.getAttribute(this.idAttrs[i])) { return e.getAttribute(this.idAttrs[i]); } } if (e.id && e.id.indexOf("yui_") != 0) //MOJITO { return e.id; } return null; } this.getIdAttribute = function(e) { for (var i=0; i<this.idAttrs.length; ++i) { if (e.getAttribute(this.idAttrs[i])) { return this.idAttrs[i]; } } if (e.id && e.id.indexOf("yui_") != 0) //MOJITO { return "id"; } return null; } this.trim = function (str) { return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; this.builders["text"] = function(e) { var max_substring_length = 1000; if (e.tagName.toLowerCase() == "input" && e.type == "button") return this.trim(e.value).length > 0 ? e.value.substring(0, max_substring_length) : null; if (e.textContent) return this.trim(e.textContent).length > 0 ? e.textContent.substring(0, max_substring_length) : null; return null; }; this.builders["link"] = function(e) { if (e.nodeName.toLowerCase() == 'a') { var text = e.textContent; if (!text.match(/^\s*$/)) { return text.replace(/\xA0/g, " ").replace(/^\s*(.*?)\s*$/, "$1"); } } return null; }; this.builders["name"] = function(e) { if (e.name) { return e.name; } return null; }; this.builders["xpath_id"] = function(e) { if (e.nodeType != 1) return null; // handle the case of an element with the same id as another element. var idLocator = this.getLocatorId(e); if (idLocator != null && TTW.findElement(idLocator) != e) { return "//*[@" + this.getIdAttribute(e) + "=" + this.attributeValue(this.getLocatorId(e)) + "][2]"; } var path = ''; var current = e.parentNode; var pXPath = null; var parentWithId = null; while (pXPath == null && current != null && current.nodeType == 1 && this.QName(current).indexOf("#") != 0) { //alert("while: " + current + " : " + this.getLocatorId(current)); // find the nearest parent with an id or name if (this.getLocatorId(current) != null) { pXPath = "/" + "/" + this.QName(current) + "[@" + this.getIdAttribute(current) + "=" + this.attributeValue(this.getLocatorId(current)) + "]"; } else { if (current.hasAttribute("name") && current.getAttribute("name") != "") pXPath = "/" + "/" + this.QName(current) + "[@name=" + this.attributeValue(current.getAttribute("name")) + "]"; } if (pXPath != null) parentWithId = current; current = current.parentNode; } if (pXPath != null) { current = e; while ((current != null) && (current != parentWithId) && (current.nodeType == 1) && this.QName(current).indexOf("#") != 0) { var currentPath = '/' + this.QName(current); if (current.parentNode != null) { var childNodes = current.parentNode.childNodes; var total = 0; var index = -1; for (var i = 0; i < childNodes.length; i++) { var child = childNodes[i]; if (child.nodeName == current.nodeName) { if (child == current) index = total; total++; } } if (total > 1 && index >= 0) { currentPath += '[' + (index + 1) + ']'; } } path = currentPath + path; var locator = '/' + path; current = current.parentNode; } if (current != null) | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,228 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: cookieUtils.js****************************************************/function tt_getCookie() { return document.cookie;}function tt_isCookiePresent(name) { /** * Returns true if a cookie with the specified name is present, or false otherwise. * @param name the name of the cookie * @return boolean true if a cookie with the specified name is present, or false otherwise. */ var v = tt_getCookieByName(name); var absent = (v === null); return !absent;} function tt_doCreateCookie(nameValuePair, optionsString) { /** * Create a new cookie whose path and domain are same with those of current page * under test, unless you specified a path for this cookie explicitly. * * @param nameValuePair name and value of the cookie in a format "name=value" * @param optionsString options for the cookie. Currently supported options include 'path', 'max_age' and 'domain'. * the optionsString's format is "path=/path/, max_age=60, domain=.foo.com". The order of options are irrelevant, the unit * of the value of 'max_age' is second. Note that specifying a domain that isn't a subset of the current domain will * usually fail. */ var results = /[^\s=\[\]\(\),"\/\?@:;]+=[^\s=\[\]\(\),"\/\?@:;]*/.test(nameValuePair); if (!results) { // invalid parameter return; } var cookie = nameValuePair.trim(); results = /max_age=(\d+)/.exec(optionsString); if (results) { var expireDateInMilliseconds = (new Date()).getTime() + results[1] * 1000; cookie += "; expires=" + new Date(expireDateInMilliseconds).toGMTString(); } results = /path=([^\s,]+)[,]?/.exec(optionsString); if (results) { var path = results[1]; if ("/" != path) { path = path.replace(/\/$/, ""); } cookie += "; path=" + path; } results = /domain=([^\s,]+)[,]?/.exec(optionsString); if (results) { var domain = results[1]; cookie += "; domain=" + domain; } document.cookie = cookie;}function tt_doDeleteCookie(name, optionsString){ /** * Delete a named cookie with specified path and domain. Be careful; to delete a cookie, you * need to delete it using the exact same path and domain that were used to create the cookie. * If the path is wrong, or the domain is wrong, the cookie simply won't be deleted. Also * note that specifying a domain that isn't a subset of the current domain will usually fail. * * Since there's no way to discover at runtime the original path and domain of a given cookie, * we've added an option called 'recurse' to try all sub-domains of the current domain with * all paths that are a subset of the current path. Beware; this option can be slow. In * big-O notation, it operates in O(n*m) time, where n is the number of dots in the domain * name and m is the number of slashes in the path. * * @param name the name of the cookie to be deleted * @param optionsString options for the cookie. Currently supported options include 'path', 'domain' * and 'recurse.' The optionsString's format is "path=/path/, domain=.foo.com, recurse=true". * The order of options are irrelevant. Note that specifying a domain that isn't a subset of * the current domain will usually fail. */ // set the expire time of the cookie to be deleted to one minute before now. var path = ""; var domain = ""; var recurse = false; var matched = false; results = /path=([^\s,]+)[,]?/.exec(optionsString); if (results) { matched = true; path = results[1]; } results = /domain=([^\s,]+)[,]?/.exec(optionsString); if (results) { matched = true; domain = results[1]; } results = /recurse=([^\s,]+)[,]?/.exec(optionsString); if (results) { matched = true; recurse = results[1]; if ("false" == recurse) { recurse = false; } } // Treat the entire optionsString as a path (for backwards compatibility) if (optionsString & | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,229 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: getOutput.js****************************************************//** * handleTask * continueTask * * This is the javascript version of TTAutomationTaskHandler.m handleTask * * -(NSDictionary*) handleTask:(NSString*)taskName task:(NSDictionary*)task */function tta_getOutput(output){ /** * getOutput * * This is the javascript version of TTAutomationTaskHandler.m getOutput * * -(id) getOutput:(NSDictionary *)output error:(NSError **)error */ this.getOutput = function(output) { // output // // command // params { arg1, arg2 } var params = output.params; var arg1 = null; var arg2 = null; if (params != null) { arg1 = params.arg1; arg2 = params.arg2; if (arg1 != null && arg1 != "" && output.command != "output-textPresent" && output.command != "output-eval") { var loc = new TTLocator(); loc.initWithJsonString(arg1); arg1 = loc.serializeShort(); } } switch (output.command) { case "output-isElementChecked": case "output-elementChecked": { return tta_isElementChecked(arg1);; } case "output-isElementPresent": case "output-elementPresent": { return tta_isElementPresent(arg1); } case "output-isElementVisible": case "output-elementVisible": { return tta_isElementVisible(arg1); } case "output-inputValue": case "output-getElementValue": { return tta_getElementValue(arg1); } case "output-elementText": { return tta_getElementText(arg1); } case "output-allAttributeValue": { return tta_getAllAttributeValue(arg1); } case "output-allElementText": { return tta_getAllElementText(arg1); } case "output-htmlSource": { return tta_getHtmlSource(); } case "output-alert": { return tta_getAlertValue(); } case "output-confirmation": { return tta_getConfirmationValue(); } case "output-prompt": { return tta_getPromptValue(); } case "output-bodyText": { return tta_getBodyText(); } case "output-textPresent": { return tta_isTextPresent(arg1); } case "output-eval": { return tta_getEval(arg1); } case "output-innerHTML": { return tta_getInnerHTML(arg1); } case "output-location": { return tta_getLocation(); } case "output-title": { return tta_getTitle(); } case "output-xpathCount": { return tta_getXpathCount(arg1); } case "output-attributeValue": { return tta_getAttributeValue(arg1); } case "output-cookie": { return tt_getCookie(); } case "output-cookieByName": { return tt_getCookieByName(arg1); } case "output-allDropDownOptionLabels": { return tt_getAllDropDownOptionLabels(arg1); } case "output-allDropDownOptionValues": { return tt_getAllDropDownOptionValues(arg1); } // This is an implicit wait used by hybrid, but not exposed as an accessor case "output-elementReadyForAction": { return tta_readyForAction(arg1); } default: return "Unrecognized output: " + output.command; } } // The AUT no longer does the task handling... try { var value = this.getOutput(output); return ttJSON.stringify({value:value}); } catch (exception) { var msg = null; if (typeof exception == "object") { msg = exception.message; } else { msg = exception; } return ttJSON.stringify({value:null,error:{fatal:true,message:msg}}); }} | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,230 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: performAction.js****************************************************//** * handleTask * continueTask * * This is the javascript version of TTAutomationTaskHandler.m handleTask * * -(NSDictionary*) handleTask:(NSString*)taskName task:(NSDictionary*)task */function tta_performAction(task){ this.performAction = function(task) { //tt_log("perform " + task.name, "debug"); var params = task.data.params; var locator = params.arg1; var param2 = params.arg2; var elem = null; var loc = new TTLocator(); loc.initWithJsonString(locator); locator = loc.serializeShort(); switch (task.name) { case "click": case "clickAt": case "doubleClick": case "webClick": case "touchUp": case "type": case "typePassword": case "webType": case "dragAndDrop": case "dragAndDropToObject": case "scroll": case "select": case "addSelection": case "removeSelection": case "assignId": case "check": case "uncheck": case "contextMenu": case "scroll": { // This action type requires an element. // We try to find it using the locator, // but allow up to a minute of "implicit // wait" for it to appear, if it is not // immediately available. //elem = [self findElementWithWait:locator error:&error]; elem = TTW.findElement(locator); if (elem == null) { var msg = "The locator, " + locator + ", did not match any elements."; return ttJSON.stringify({error:{fatal:true,message:msg}}); } break; } } var elem2 = null; switch (task.name) { case "dragAndDropToObject": { // This action type requires an element as the second parameter. // We try to find it using the locator, // but allow up to a minute of "implicit // wait" for it to appear, if it is not // immediately available. //elem = [self findElementWithWait:locator error:&error]; elem2 = TTW.findElement(param2); if (elem2 == null) { // Implicit errors are always fatal.. var msg = "The locator, " + locator + ", did not match any elements."; return ttJSON.stringify({error:{fatal:true,message:msg}}); } break; } } switch (task.name) { case "click": case "webClick": { tta_click(elem, locator); break; } case "doubleClick": { tta_doubleClick(elem); break; } case "clickAt": { tta_clickAt(elem, param2); break; } case "dragAndDrop": { tta_dragAndDrop(elem, param2); break; } case "dragAndDropToObject": { tta_dragAndDropToObject(elem, elem2); break; } case "touchUp": { tta_touchUp(elem); break; } case "type": case "webType": case "typePassword": // passwords have already been decrypted, so we can do a normal type here. { if (param2 != null) { tta_type(elem, param2); } break; } case "contextMenu": { tta_contextMenu(elem); break; } case "select": { tta_select(elem, param2); break; } case "addSelection": { tta_addSelection(elem, param2); break; } case "removeSelection": { tta_removeSelection(elem, param2); break; } case "assignId": { tta_assignId(elem, param2); break; } case "goBack": case "back": { tta_goBack(); break; } case "createCookie": { tt_doCreateCookie(locator, param2); break; } case "deleteCookie": { tt_doDeleteCookie(locator, param2); break; } | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,233 [main][26] /**************************************************** Copyright 2012-2015 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTWAutomation.js****************************************************///Scripts for TTWfunction TTWAutomation(){}TTWAutomation.prototype.doBlur = function(elem) { if (elem.blur) { elem.blur(); } else { this.triggerEvent(elem, "blur"); }}function tta_doChange(elem) { if (elem.onchange) { elem.onchange(); } else { tta_dispatchEvent(elem, "change"); }}TTWAutomation.prototype.triggerEvent = function(elem, event){ tta_dispatchEvent(elem, event); }function tta_dispatchEvent(element, eventType){ var evt = document.createEvent('HTMLEvents'); if (evt.initEvent) { evt.initEvent(eventType, true, true); element.dispatchEvent(evt); }}//Automation functions to be injected in the AUTfunction tt_log(msg, level){ switch (level) { case "error": alert(msg); break; case "info": //alert(msg); break; case "debug": //alert(msg); break; default: alert(msg); }}function tta_scroll(elem, top, left){ // Perhaps it's a bug in the browser, but I have found that for body only, // this needs to be a number. For other elements, string would work. Also, // for body only, setting left to 0 when it's already 0 causes top to not work. if (elem.scrollTop != Number(top)) elem.scrollTop = Number(top); if (elem.scrollLeft != Number(left)) elem.scrollLeft = Number(left);}function tta_select(elem, optionLocator){ if (elem.type != "date") tta_selectOption(elem, optionLocator) else elem.value = optionLocator;}function tta_findOptionIndex(elem, optionLocator){ if (optionLocator.indexOf("value=") == 0) { var value = optionLocator.substring(6); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (elem.options[ndx].value == value) { return ndx; } } } else if (optionLocator.indexOf("id=") == 0) { var id = optionLocator.substring(3); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (id == elem.options[ndx].getAttribute("id")) { return ndx; } } } else if (optionLocator.indexOf("index=") == 0) { var index = optionLocator.substring(6); return Number(index); } else if (optionLocator.indexOf("text=") == 0) { var text = optionLocator.substring(5); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (elem.options[ndx].text == text) { return ndx; } } } else if (optionLocator.indexOf("label=") == 0) { var label = optionLocator.substring(6); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (elem.options[ndx].text == label) { return ndx; } } }}function tta_goBack(){ window.history.back();}function tta_check(elem){ elem.checked = true;}function tta_uncheck(elem){ elem.checked = false;}function tta_assignId(elem, newID){ elem.setAttribute("id", newID);}function tta_type(elem, value){ var ttw = new TTWAutomation(); elem.value = value; this.doBlur(elem); if (elem.change) { elem.change(); } this.triggerEvent(elem, "change"); //ttw.doType(elem,value);}function tta_isElementChecked(loc){ var element = TTW.findElement(loc); if (element != null) { if (element.checked) { return true; } } return false;}function tta_isElementPresent(loc){ return TTW.findElement(loc) != null;}function tta_isElementVisible(loc){ var element = TTW.findElement(loc); if (element != null) { if (element.offsetWidth > 0 && element.offsetHeight > 0) { if (element.style.display == "none") { return false; } var elementRect = element.getBoundingClientRect(); if (elementRect.top >= 0 && elementRect.left >= 0 && elementRect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && elementRect.right <= (window.innerWidth || document.documentElement.clientWidth)) { | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,234 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTWRecorder.js****************************************************/var TTWRecorder = { keydownElem : null, locator : null, isPassword : false, keyboardTab : false, keyboardReturn : false};function tt_onKeyDown(e){ if (e.target != window.top.TTWRecorder.keydownElem) { window.top.TTWRecorder.locator = window.top.TTW.getLocator(e.target, 'all'); window.top.TTWRecorder.keydownElem = e.target; } var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0; if (key == 9) { window.top.TTWRecorder.keyboardTab = true; window.top.document.location.href='ttwr://keyboardTab'; } else if (key == 13) { window.top.TTWRecorder.keyboardReturn = true; window.top.document.location.href='ttwr://keyboardReturn' + '?value=' + encodeURIComponent(e.target.value) + '&locator=' + encodeURIComponent(window.top.TTWRecorder.locator) + pwdParam; } else { window.top.TTWRecorder.isPassword = e.target.getAttribute("type") == "password"; var pwdParam = window.top.TTWRecorder.isPassword ? "&isPassword=true" : ""; window.top.document.location.href='ttwr://pendingType' + '?value=' + encodeURIComponent(e.target.value) + '&locator=' + encodeURIComponent(window.top.TTWRecorder.locator) + pwdParam; }}// Called by nativefunction tt_getScrollPos(elem){ if (!elem) elem = document.body; return ttJSON.stringify({top: elem.scrollTop, left: elem.scrollLeft})}function TTW_addListeners(){ if (window.top.TTW_Options != null && window.top.TTW_Options.os == "iOS") { // In iOS, this can't be done on a timeout or it won't happen in cases where the page is going away (eBay search) document.addEventListener('keydown', function(e){tt_onKeyDown(e)}, true); } else { document.addEventListener('keydown', function(e){setTimeout(function() {tt_onKeyDown(e);}, 10)}, true); }}//This function is called by the TouchTest Web appTTWRecorder.evaluateJavaScript = function(view, script){ var result = eval("(" + script + ")"); if (result != undefined) autJavascriptEvaluator.didFinishEvaluation(view, script, result.toString());}//console.log("JS: TTWRecorder END"); | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,235 [main][26] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TouchTestLocator.js****************************************************//** * TouchTestLocator */function TouchTestLocator(){}// Mobile web allows a tolerance of 15px when tapping on small items like// checkboxes and radios.TouchTestLocator.touchTolerance = 15;/** * This function is used by TTD for Touch Locator on Hybrid app */TouchTestLocator.inspectWithLocator = function(locator, bPositionOnly){ try { locator = unescape(locator); var target = TTW.findElement(locator); var position = target.getBoundingClientRect(); var output; if (bPositionOnly) { output = ttJSON.stringify({ "x" : "" + position.left, "y" : "" + position.top, "w" : "" + position.width, "h" : "" + position.height, "type" : "" + target.getAttribute("type") }); } else { output = ttJSON.stringify({ "locators" : TTW.getLocator(target, 'all'), "tagName" : "" + target.tagName, "x" : "" + position.left, "y" : "" + position.top, "w" : "" + position.width, "h" : "" + position.height, "type" : "" + target.getAttribute("type") }); } if (window.top.touchLocatorJavascriptOutputEvaluator) window.top.touchLocatorJavascriptOutputEvaluator.didFinishOutputEvaluation("inspectWithLocator", output); else return output; } catch (e) { return "Exception in inspectWithLocator: " + e.message + "\n" + e.stack; } }// This will return a message as a locator from inspectWithPoint. Used only for debugging!!TouchTestLocator.inspectWithPointLogging = function(msg){// var metas = document.getElementsByTagName('meta');// for (i=0; i<metas.length; i++) {// if (metas[i].name == "viewport") {// metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";// }// } var output = ttJSON.stringify({ "locators" : {"selected":"default","locators":{"default":"elem: " + msg, "xpath":{}}}, "tagName" : "iframe", "x" : "0", "y" : "0", "w" : "0", "h" : "0", "type" : ""});}/** * This function is used by TTD for Touch Locator on Hybrid app */TouchTestLocator.inspectWithPoint = function(x, y){ //return TouchTestLocator.inspectWithPointLogging(); try { var target = document.elementFromPoint(x, y); if (target.nodeName.toLowerCase() == "form") { // Let's see if we clicked close enough to one of the form inputs... var inputs = target.getElementsByTagName("input"); for (var i=0; i<inputs.length; ++i) { var inputType = inputs[i].getAttribute("type"); if (inputType == "checkbox" || inputType == "radio") { var inputPos = inputs[i].getBoundingClientRect(); if (Math.abs(x - (inputPos.width + inputPos.left)) < TouchTestLocator.touchTolerance && Math.abs(y - (inputPos.height + inputPos.top)) < TouchTestLocator.touchTolerance) { // Changing the target element to be the input target = inputs[i]; break; } } } } if (target.nodeName.toLowerCase() == "iframe" && target.contentWindow.TouchTestLocator != null) // This will be null for cross-domain iframes { try { // Translate the point to the iframe var framePosition = target.getBoundingClientRect(); var xinframe = x - framePosition.left; var yinframe = y - framePosition.top; return target.contentWindow.TouchTestLocator.inspectWithPoint(xinframe, yinframe); } catch (e) { var output = ttJSON.stringify({ "locators" : {"selected":"default","locators":{"default":e.message, "xpath":{}}}, "tagName" : "iframe", | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,235 [main][26] /**************************************************** Copyright 2013-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTWinit.js****************************************************///This is the last script that is loaded from (ttw_autScripts)TTW.init();window.top.TTW.loaded = true;window.debugLoaded = true; | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,235 [main][26] | |
[INFO] : [Nexus 6P] TouchTestDriver: 10:29:04,236 [main][26] Set the page load to (thread: main): true | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,236 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://expirebox.com/favicon.ico | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,237 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/v2.11/plugins/page.php?adapt_container_width=true&app_id=&channel=https%3A%2F%2Fstaticxx.facebook.com%2Fconnect%2Fxd_arbiter%2Fr%2FlY4eZXm_YWu.js%3Fversion%3D42%23cb%3Df1c6c93b4e7256c%26domain%3Dexpirebox.com%26origin%3Dhttps%253A%252F%252Fexpirebox.com%252Ff1d80ba81e1f8d8%26relation%3Dparent.parent&container_width=0&hide_cover=true&href=https%3A%2F%2Fwww.facebook.com%2FFileNurse&locale=en_US&sdk=joey&show_facepile=true&small_header=false&tabs=timeline | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,238 [main][26] Loading and evaluating 0 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,239 [main][26] Loading and evaluating 1 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,240 [main][26] Loading and evaluating 2 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,240 [main][26] Loading and evaluating 3 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,241 [main][26] Loading and evaluating 4 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,241 [main][26] Loading and evaluating 5 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,242 [main][26] Loading and evaluating 6 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,242 [main][26] Loading and evaluating 7 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,242 [main][26] Loading and evaluating 8 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,243 [main][26] Loading and evaluating 9 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,243 [main][26] Loading and evaluating 10 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,244 [main][26] Loading and evaluating 11 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,244 [main][26] Loading and evaluating 12 | |
[INFO] : [Nexus 6P] I/TiWebChromeClient.console: (main) [984,3211] Mixed Content: The page at 'https://expirebox.com/' was loaded over HTTPS, but requested an insecure script 'ttw://TouchTestWebInnerFrameScripts__Combined.js'. This request has been blocked; the content must be served over HTTPS. (1:) | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,439 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/y4/l/0,cross/2IIg9iUo0f3.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,445 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yI/l/0,cross/0Xlu5eqfuG_.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,445 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yY/l/0,cross/MimD-Cevj4o.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,447 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yP/r/WjDlkKUPZf8.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,448 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yf/r/wS3y3-NpXR_.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,448 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3iQB64/yB/l/en_US/J04ec7io3nO.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,461 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yp/r/ogdMWB0s3jS.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,462 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3ijLc4/y4/l/en_US/YtO_d5YOg-P.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,462 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yl/r/F4_kTgR8Vor.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,462 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3izpg4/yq/l/en_US/etE7LDGk92U.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,462 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3iOJO4/yP/l/en_US/ZfyBNZdg88c.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,462 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yf/r/P3ffxQGUgDP.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,462 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3i7A34/yu/l/en_US/Ex9zeNe1MXL.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,471 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/p50x50/936588_1135654629787380_360588135685524405_n.png?oh=094c4ecd7bbc858d8641ee8583f4e5c6&oe=5B05A55A | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:04,895 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/y-/r/KsG3u3GrOUd.png | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,507 [main][23] The anchor reference for https://expirebox.com/ is null and the query string is null | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,507 [main][23] onPageFinished ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{700021f VFEDHVCL. .F...... 0,0-1080,1536 #3}, https://expirebox.com/ : injecting as it is file/http protocol. Reload JS? false Page started loading? true | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,508 [main][23] Loading and evaluating all TTW scripts | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,525 [main][23] Base64 : LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiAg | |
[DEBUG] : [Nexus 5] TouchTestDriver: Q29weXJpZ2h0IDIwMTMtMjAxNCBTT0FTVEEsIEluYy4KKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K | |
[DEBUG] : [Nexus 5] TouchTestDriver: KiAgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbC4KKgoqICBGaWxlOiAgVFRXLmpzCioKKioq | |
[DEBUG] : [Nexus 5] TouchTestDriver: KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp3aW5kb3cu | |
[DEBUG] : [Nexus 5] TouchTestDriver: dHRyX2luaXRpYWxpemVkID0gZmFsc2U7CmlmICghd2luZG93LlRUV19PcHRpb25zKQp7CiAgVFRX | |
[DEBUG] : [Nexus 5] TouchTestDriver: X09wdGlvbnMgPSB7fTsKfQpUVFcgPSB7fTsKClRUVy5sb2cgPSBmdW5jdGlvbihtc2cpCnsKICB3 | |
[DEBUG] : [Nexus 5] TouchTestDriver: aW5kb3cudG9wLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSAidHRsb2c6Ly8iICsgZW5jb2RlVVJJ | |
[DEBUG] : [Nexus 5] TouchTestDriver: Q29tcG9uZW50KG1zZyk7Cn0KLy8gV2UncmUgZ29pbmcgdG8gbmVlZCBKU09OLnN0cmluaWZ5LCBz | |
[DEBUG] : [Nexus 5] TouchTestDriver: byBtYWtlIHN1cmUgbm8gb25lIGhhcyB0YW1wZXJlZCB3aXRoIGl0Lgp0dEpTT04gPSB3aW5kb3cu | |
[DEBUG] : [Nexus 5] TouchTestDriver: SlNPTjsKaWYgKHR0SlNPTi5zdHJpbmdpZnkudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29k | |
[DEBUG] : [Nexus 5] TouchTestDriver: ZSIpID09IC0xKSAgICAgIAp7CiAgLy8gU29tZW9uZSBoYXMgb3ZlcndyaXR0ZW4gd2luZG93LkpT | |
[DEBUG] : [Nexus 5] TouchTestDriver: T04uc3RyaW5pZnkgKHd3dy5jbm4uY29tISkuICBDcmVhdGUgYW4gaWZyYW1lIHRvCiAgLy8gZ2V0 | |
[DEBUG] : [Nexus 5] TouchTestDriver: IHRoZSBuYXRpdmUgSlNPTiBvYmplY3QgYmFjay4KICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3Jl | |
[DEBUG] : [Nexus 5] TouchTestDriver: YXRlRWxlbWVudCgiaWZyYW1lIik7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUp | |
[DEBUG] : [Nexus 5] TouchTestDriver: OwogIGlmcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgaWZyYW1lLnN0eWxlLnBv | |
[DEBUG] : [Nexus 5] TouchTestDriver: c2l0aW9uID0gImFic29sdXRlIjsKICBpZnJhbWUuc3R5bGUud2lkdGg9IjFweCI7CglpZnJhbWUu | |
[DEBUG] : [Nexus 5] TouchTestDriver: c3R5bGUuaGVpZ2ggPSAiMXB4IjsKICB0dEpTT04gPSBpZnJhbWUuY29udGVudFdpbmRvdy5KU09O | |
[DEBUG] : [Nexus 5] TouchTestDriver: OyAgICAgICAKfQoKZnVuY3Rpb24gdHRfb25sb2FkKGUpCnsKIC8vIFdoZW4gdGhlIGlmcmFtZSBp | |
[DEBUG] : [Nexus 5] TouchTestDriver: cyByZS1sb2FkZWQsIHdlIHJlbW92ZSB0aGUgaGFzVEREIGF0dHJpYnV0ZSBzbyB0aGF0IHRoZSBz | |
[DEBUG] : [Nexus 5] TouchTestDriver: Y3JpcHQgd2lsbCBhZ2FpbgogLy8gYmUgaW5qZWN0ZWQuCiBlLnRhcmdldC5yZW1vdmVBdHRyaWJ1 | |
[DEBUG] : [Nexus 5] TouchTestDriver: dGUoImhhc1RURCIpOwp9CgovL1RoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgVFRXIHdpbGwgY2Fs | |
[DEBUG] : [Nexus 5] TouchTestDriver: bCBkdXJpbmcgd2ViVmlld0RpZEZpbmlzaExvYWQgd2hlbiB0aGUgVUlXZWJWaWV3IGFscmVhZHkg | |
[DEBUG] : [Nexus 5] TouchTestDriver: aGFzIFRUVyBzY3JpcHRzIGluIGl0LgovL1dlIGRvbid0IGtub3cgd2hpY2ggZnJhbWUgaXQgaXMg | |
[DEBUG] : [Nexus 5] TouchTestDriver: dGhhdCBsb2FkZWQsIGJ1dCB0aGVyZSBoYXMgdG8gYmUgYSBmcmFtZSBzb21ld2hlcmUgdGhhdCBo | |
[DEBUG] : [Nexus 5] TouchTestDriver: YXMganVzdCBsb2FkZWQgYW5kIGRvZXNuJ3QKLy95ZXQgaGF2ZSBUVEQgaW4gaXQuICBXZSBhbHNv | |
[DEBUG] : [Nexus 5] TouchTestDriver: IGNhbGwgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIFRUV0F1dG9tYXRpb24uc2NyaXB0IGlu | |
[DEBUG] : [Nexus 5] TouchTestDriver: IGNhc2UgdGhlIGZyYW1lIGxvYWQgYmVmb3JlCi8vdGhlIG1haW4gZG9jdW1lbnQgaGFzIFRURCBp | |
[DEBUG] : [Nexus 5] TouchTestDriver: bmplY3RlZC4KZnVuY3Rpb24gdHRfaW5qZWN0SW5TdWJmcmFtZXMoKQp7ICAKICB2YXIgaWZyYW1l | |
[DEBUG] : [Nexus 5] TouchTestDriver: cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUiKTsKICBmb3IgKHZhciBp | |
[DEBUG] : [Nexus 5] TouchTestDriver: PTA7IGk8aWZyYW1lcy5sZW5ndGg7ICsraSkKICB7CiAgICB2YXIgaWZyYW1lID0gaWZyYW1lc1tp | |
[DEBUG] : [Nexus 5] TouchTestDriver: XTsKICAgIHR0X2luamVjdEluRnJhbWUoaWZyYW1lKTsKICB9Cn0KCmZ1bmN0aW9uIHR0X2luamVj | |
[DEBUG] : [Nexus 5] TouchTestDriver: dEluRnJhbWUoaWZyYW1lKQp7ICAKICAvL1RoaXMgaXMgIHRoZSBzY3JpcHQgdGhhdCBpcyBldmFs | |
[DEBUG] : [Nexus 5] TouchTestDriver: J2QgaW4gdGhlIHRvcCBBVVQgZG9jdW1lbnQncyBpZnJhbWVzLgogIHZhciBzY3JpcHQgPSAidHJ5 | |
[DEBUG] : [Nexus 5] TouchTestDriver: IiArIAogICAgICAgICAgICAgICAieyIgKyAKICAgICAgICAgICAgICAgICAgInZhciBzayA9IGRv | |
[DEBUG] : [Nexus 5] TouchTestDriver: Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOyIgKyAKICAgICAgICAgICAgICAgICAgInNr | |
[DEBUG] : [Nexus 5] TouchTestDriver: LnNyYyA9ICd0dHc6Ly9Ub3VjaFRlc3RXZWJJbm5lckZyYW1lU2NyaXB0c19fQ29tYmluZWQuanMn | |
[DEBUG] : [Nexus 5] TouchTestDriver: OyIgKyAKICAgICAgICAgICAgICAgICAgInNrLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsiICsg | |
[DEBUG] : [Nexus 5] TouchTestDriver: CiAgICAgICAgICAgICAgICAgICJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNrKTsiICsgCiAg | |
[DEBUG] : [Nexus 5] TouchTestDriver: ICAgICAgICAgICAgICAifSIgKyAKICAgICAgICAgICAgICAgICJjYXRjaChlKSIgKyAKICAgICAg | |
[DEBUG] : [Nexus 5] TouchTestDriver: ICAgICAgICAgICJ7IiArIAogICAgICAgICAgICAgICAgICAvLyJhbGVydChcIlRUVyBpbmplY3Qg | |
[DEBUG] : [Nexus 5] TouchTestDriver: ZmFpbGVkIGJlY2F1c2U6IFwiICsgZS5tZXNzYWdlKSIgKyAKICAgICAgICAgICAgICAgICJ9OyI7 | |
[DEBUG] : [Nexus 5] TouchTestDriver: CiAgdHJ5CiAgewogICAgaWYgKGlmcmFtZS5nZXRBdHRyaWJ1dGUoImhhc1RURCIpID09IG51bGwp | |
[DEBUG] : [Nexus 5] TouchTestDriver: CiAgICB7CiAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykKICAgICAgewogICAgICAgIGlm | |
[DEBUG] : [Nexus 5] TouchTestDriver: IChpZnJhbWUuY29udGVudFdpbmRvdy5ldmFsICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAg | |
[DEBUG] : [Nexus 5] TouchTestDriver: aWZyYW1lLmNvbnRlbnRXaW5kb3cuZXZhbChzY3JpcHQpOyAKICAgICAgICAgIGlmcmFtZS5zZXRB | |
[DEBUG] : [Nexus 5] TouchTestDriver: dHRyaWJ1dGUoImhhc1RURCIsICJ0cnVlIik7CiAgICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0 | |
[DEBUG] : [Nexus 5] TouchTestDriver: ZW5lcigibG9hZCIsIHR0X29ubG9hZCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAg | |
[DEBUG] : [Nexus 5] TouchTestDriver: ICAgICB7CiAgICAgICAgICAvL2FsZXJ0KCJub24tdGVzdGFibGUgZnJhbWUgZGV0ZWN0ZWQiKTsK | |
[DEBUG] : [Nexus 5] TouchTestDriver: ICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgLy9hbGVydCgibm8g | |
[DEBUG] : [Nexus 5] TouchTestDriver: Y29udGVudFdpbmRvdyIpICAKICAgICAgfQogICAgfQogIH0KICBjYXRjaCAoZSkgCiAgewogICAg | |
[DEBUG] : [Nexus 5] TouchTestDriver: Ly9hbGVydCgiZXhjZXB0aW9uIGluIGlmcmFtZS5ldmFsOiAiICsgZSArICIgY29udGVudFdpbmRv | |
[DEBUG] : [Nexus 5] TouchTestDriver: dzogIiArIGlmcmFtZS5jb250ZW50V2luZG93ICsgIiAgZXZhbDogIiArIGlmcmFtZS5jb250ZW50 | |
[DEBUG] : [Nexus 5] TouchTestDriver: V2luZG93LmV2YWwgKyAiI | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,527 [main][23] Decoded from base64 : 13 scripts | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,527 [main][23] /**************************************************** Copyright 2013-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTW.js****************************************************/window.ttr_initialized = false;if (!window.TTW_Options){ TTW_Options = {};}TTW = {};TTW.log = function(msg){ window.top.document.location.href = "ttlog://" + encodeURIComponent(msg);}// We're going to need JSON.strinify, so make sure no one has tampered with it.ttJSON = window.JSON;if (ttJSON.stringify.toString().indexOf("native code") == -1) { // Someone has overwritten window.JSON.strinify (www.cnn.com!). Create an iframe to // get the native JSON object back. var iframe = document.createElement("iframe"); document.body.appendChild(iframe); iframe.style.visibility = "hidden"; iframe.style.position = "absolute"; iframe.style.width="1px"; iframe.style.heigh = "1px"; ttJSON = iframe.contentWindow.JSON; }function tt_onload(e){ // When the iframe is re-loaded, we remove the hasTDD attribute so that the script will again // be injected. e.target.removeAttribute("hasTTD");}//This is the function that TTW will call during webViewDidFinishLoad when the UIWebView already has TTW scripts in it.//We don't know which frame it is that loaded, but there has to be a frame somewhere that has just loaded and doesn't//yet have TTD in it. We also call this function at the end of TTWAutomation.script in case the frame load before//the main document has TTD injected.function tt_injectInSubframes(){ var iframes = document.getElementsByTagName("iframe"); for (var i=0; i<iframes.length; ++i) { var iframe = iframes[i]; tt_injectInFrame(iframe); }}function tt_injectInFrame(iframe){ //This is the script that is eval'd in the top AUT document's iframes. var script = "try" + "{" + "var sk = document.createElement('script');" + "sk.src = 'ttw://TouchTestWebInnerFrameScripts__Combined.js';" + "sk.type = 'text/javascript';" + "document.head.appendChild(sk);" + "}" + "catch(e)" + "{" + //"alert(\"TTW inject failed because: \" + e.message)" + "};"; try { if (iframe.getAttribute("hasTTD") == null) { if (iframe.contentWindow) { if (iframe.contentWindow.eval != null) { iframe.contentWindow.eval(script); iframe.setAttribute("hasTTD", "true"); iframe.addEventListener("load", tt_onload, true); } else { //alert("non-testable frame detected"); } } else { //alert("no contentWindow") } } } catch (e) { //alert("exception in iframe.eval: " + e + " contentWindow: " + iframe.contentWindow + " eval: " + iframe.contentWindow.eval + " window.eval: " + window.eval); }}TTW.init = function(){ if (!window.ttr_initialized) { try { window.ttr_initialized=true; window.tt_ra=[]; TTW_addListeners(); TTW.LocatorBuilders = new TTW_locatorBuilders(); TTW.ElementFinders = new TTW_elementFinders(); window.tta_WaitHandler=null; window.tta_initialized=true; window.tta_currentWindow=window; tt_injectInSubframes(); } catch (e) { //alert("Exception in TTW.init: " + e.message); window.setTimeout(TTW.init, 1000); return "TTW.init Trying again... typeof TTW_addListeners: " + (typeof TTW_addListeners); } return "TTW.init SUCCEEDED"; }}TTW.iframeInit = function(){ if (!window.ttr_initialized) { try { window.ttr_initialized=true; TTW_addListeners(); window.tta_WaitHandler=null; window.tta_initialized=true; window.tta_currentWindow=window; tt_injectInSubframes(); } catch (e) { //alert("Exception in TTW.iframeInit: " + e.message); window.setTimeout(TTW.iframeInit, 1000); return "TTW.iframeInit Trying | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,528 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: elementFinders.js****************************************************/function TTW_elementFinders() { this.idAttrs = ["data-test-id","datatestid"]; this.finders = {}; this.filterFunctions = {}; this.filterFunctions.name = function(name, elements) { var selectedElements = []; for (var i = 0; i < elements.length; i++) { if (elements[i].name === name) { selectedElements.push(elements[i]); } } return selectedElements; } this.filterFunctions.value = function(value, elements) { var selectedElements = []; for (var i = 0; i < elements.length; i++) { if (elements[i].value === value) { selectedElements.push(elements[i]); } } return selectedElements; } this.filterFunctions.index = function(index, elements) { index = Number(index); if (isNaN(index) || index < 0) { alert("Illegal Index: " + index); } if (elements.length <= index) { alert("Index out of range: " + index); } return [elements[index]]; } this.locateElementByDomTraversal = function(locator, inDocument, inWindow) { alert("todo locateElementByDomTraversal"); } this.finders["implicit"] = function(locator, inDocument, inWindow, bReturnFirst) { if (locator.indexOf('//') == 0) { return this.finders["xpath"].call(this, locator, inDocument, inWindow, bReturnFirst); } if (locator.indexOf('document.') == 0) { return this.locateElementByDomTraversal(locator, inDocument, inWindow); } return this.finders["id"].call(this, locator, inDocument, inWindow) || this.finders["name"].call(this, locator, inDocument, inWindow) || null; } this.finders["id"] = function(locator, doc, win) { for (var i=0; i<this.idAttrs.length; ++i) { var elem = TTW.findElement("//*[@" + this.idAttrs[i] + "=\"" + locator + "\"]"); if (elem != null) return elem; } return doc.getElementById(locator); } this.finders["link"] = function(locator, doc, win) { var links = doc.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { var element = links[i]; if (locator == element.textContent) { return element; } } return null; } this.finders["name"] = function(locator, doc, win) { return this.locateElementByName(locator, doc); } this.selectElementsBy = function(filterType, filter, elements) { var filterFunction = this.filterFunctions[filterType]; if (!filterFunction) { return null; //alert("Unrecognised element-filter type: '" + filterType + "'"); } return filterFunction(filter, elements); } this.selectElements = function(filterExpr, elements, defaultFilterType) { var filterType = (defaultFilterType || 'value'); // If there is a filter prefix, use the specified strategy var result = filterExpr.match(/^([A-Za-z]+)=(.+)/); if (result) { filterType = result[1].toLowerCase(); filterExpr = result[2]; } return this.selectElementsBy(filterType, filterExpr, elements); } this.locateElementByName = function(locator, document, inWindow) { var elements = document.getElementsByTagName("*"); var filters = locator.split(' '); filters[0] = 'name=' + filters[0]; while (filters.length) { var filter = filters.shift(); elements = this.selectElements(filter, elements, 'value'); } if (elements.length > 0) { return elements[0]; } return null; } this.finders["text"] = function(locator, doc, win, bReturnFirst) { var elem = this.finders["xpath"].call(this,"//*[starts-with(text(), \"" + locator + "\")]", doc, win, false); var textProperty = "textContent"; if (!elem) { elem = this.finders["xpath"].call(this,"//input[starts-with(@value, \"" + locator + "\")]", doc, win, false); textProperty = "value"; } if (Array.isArray | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,529 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: findElement.js****************************************************/TTW.findAllElements = function(locator) { return TTW.findElement(locator, true);}TTW.findElement = function(locator, bReturnArray) { this.findElementRecursive = function(strategy, locator, index, inDocument, inWindow, bReturnFirst) { // Try finding the element in the given window var element = null; try { if (index > 0) { var elems = TTW.ElementFinders.findElementBy(strategy, locator, inDocument, inWindow, false); element = elems && elems.length > index ? elems[index] : null; } else { element = TTW.ElementFinders.findElementBy(strategy, locator, inDocument, inWindow, bReturnFirst); } } catch (e) { tt_log("Exception in findElementRecursive: " + e, "info"); } if (element != null) { return element; } // Continue looking in frames var frames = null; try { frames = inWindow.frames; } catch (e) { tt_log("findElementRecursive exception getting inWindow.frames: " + e, "info"); } for (var i = 0; i < frames.length; i++) { var doc = null; try { doc = frames[i].document; } catch (e) { tt_log("findElementRecursive exception getting frames[i].document: " + e, "info"); } if (doc && frames[i] && doc != null && frames[i] != null) { element = this.findElementRecursive(strategy, locator, index, doc, frames[i], bReturnFirst); if (element != null) { return element; } } } return null; } this.strategyCanHaveIndex = function(strategy) { return strategy == "tagname"; } this.stringStartsWith = function(string, prefix) { // If string is something like "name=Mukul\nAte\nA\nBagel", then checks to see if prefix (i.e. // name, text, link) will match the first n characters of "string", where n is the prefix length. return string.slice(0, prefix.length) == prefix; } this.locatorHasStrategy = function(string) { var builders = TTW.getLocatorBuilders(); for (var i=0; i<builders.length; i++) { // Loops through all the different types of locators that are supported (name, link, text) and whichever // one matches is the strategy type if (this.stringStartsWith(string, builders[i])) { return builders[i]; } } return null; } this.findElementOrNull = function(locator, win, bReturnFirst) { var strategy; var index = 0; // If there is a locator prefix, use the specified strategy strategy = this.locatorHasStrategy(locator); if (strategy) { // Remove the strategy followed by the expected "=". For example, // "text=MoogleWasHere" will become "MoogleWasHere". locator = locator.slice(strategy.length + 1); if (this.strategyCanHaveIndex(strategy)) { // pick the [] off the locator var result = locator.match(/\[(.*?)\]/); if (result) { locator = locator.substring(0,locator.indexOf("[")); index = result[1]; } } } else { // No strategy defined, implied strategy of xpath, document, id, or name. strategy = 'implicit'; } //alert("strategy: " + strategy + " loc: " + locator + " index: " + index); return this.findElementRecursive(strategy, locator, index, win.document, win, bReturnFirst); } var win = window.tta_currentWindow ? window.tta_currentWindow : window; return this.findElementOrNull(locator, win, (bReturnArray != true));} | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,529 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: getLocator.js****************************************************//** * tt_getLocator * * elem - the element to build a locator for * strategy (optional) - the specific strategy to use. */eLocStrategies = { DEFAULT : "default", ID : "id", ISSE : "isse", NAME : "name", LINK : "link", TEXT : "text", TAGNAME : "tagname", XPATH_1 : "xpath_1", XPATH_POSITION : "xpath_position", XPATH_ID : "xpath_id", XPATH_CLASSNAME : "xpath_classname"}function TTLocator(){ this.selected; this.locators = {}; this.xpathLocators = {}; this.shortLocator = null;}TTLocator.prototype.initWithJsonString = function(locator){ var loc = null; if (typeof locator == "object") { loc = locator; } else { if (locator.indexOf("{") == 0 && locator.indexOf("{%%") != 0) loc = eval('(' + locator + ')'); else this.shortLocator = locator; } if (loc != null) { this.selected = loc.selected; this.locators = loc.locators; this.xpathLocators = loc.locators.xpath; }}TTLocator.prototype.requiresPrefix = function(strategy){ strategy = strategy.toLowerCase(); return !this.isXpathStrategy(strategy) && strategy != "isse" && strategy != "default" && strategy != "xpath_1";}TTLocator.prototype.isXpathStrategy = function(strategy){ strategy = strategy.replace("xpath.", ""); return strategy == eLocStrategies.XPATH_POSITION || strategy == eLocStrategies.XPATH_ID || strategy == eLocStrategies.XPATH_CLASSNAME || strategy == eLocStrategies.XPATH_1; }TTLocator.prototype.serializeShort = function(){ if (this.shortLocator) return this.shortLocator; if (this.isXpathStrategy(this.selected)) return this.xpathLocators[this.selected.replace("xpath.", "")]; else return (this.requiresPrefix(this.selected) ? this.selected + "=" : "") + this.locators[this.selected];}TTW.getLocatorBuilders = function(){ return ["id", "name", "link", "text", "xpath_id", "xpath_classname", "xpath_position", "tagname"];}TTW.getLocator = function(elem, strategy) { this.locators = {} this.xpathLocators = {} this.selected = eLocStrategies.DEFAULT; this.requiresPrefix = function(strategy) { strategy = strategy.toLowerCase(); return !this.isXpathStrategy(strategy) && strategy != "isse" && strategy != "default" && strategy != "xpath_1"; } this.isXpathStrategy = function(strategy) { strategy = strategy.replace("xpath.", ""); return strategy == eLocStrategies.XPATH_POSITION || strategy == eLocStrategies.XPATH_ID || strategy == eLocStrategies.XPATH_CLASSNAME || strategy == eLocStrategies.XPATH_1; } this.serializeShort = function() { if (this.isXpathStrategy(this.selected)) return this.xpathLocators[this.selected.replace("xpath.", "")]; else return (this.requiresPrefix(this.selected) ? this.selected + "=" : "") + this.locators[this.selected]; } this.serialize = function() { if (this.selected) { // Add the xpath locators to the locators dictionary this.locators["xpath"] = this.xpathLocators; var json = {"selected": (this.isXpathStrategy(this.selected) ? "xpath." : "") + this.selected, "locators": this.locators}; return ttJSON.stringify(json); } else { return null; } } this.exactMatchPattern = function(string) { if (string != null && (string.match(/^\w*:/) || string.indexOf('?') >= 0 || string.indexOf('*') >= 0)) return "exact:" + string; else return string; } this.addLocator = function(locator, finderName) { if (this.selected == eLocStrategies.DEFAULT) this.selected = finderName; if (this.isXpathStrategy(finderName)) this.xpathLocators[finderName] = locator; else this.locators[finderName] = locator; } this.buildAll = function(e, bReturnFirst) { var | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,530 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: locatorBuilders.js****************************************************/function TTW_locatorBuilders() { this.idAttrs = ["data-test-id","datatestid"]; this.builders = {}; this.builders["id"] = function(e) { return this.getLocatorId(e); }; this.getLocatorId = function(e) { for (var i=0; i<this.idAttrs.length; ++i) { if (e.getAttribute(this.idAttrs[i])) { return e.getAttribute(this.idAttrs[i]); } } if (e.id && e.id.indexOf("yui_") != 0) //MOJITO { return e.id; } return null; } this.getIdAttribute = function(e) { for (var i=0; i<this.idAttrs.length; ++i) { if (e.getAttribute(this.idAttrs[i])) { return this.idAttrs[i]; } } if (e.id && e.id.indexOf("yui_") != 0) //MOJITO { return "id"; } return null; } this.trim = function (str) { return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; this.builders["text"] = function(e) { var max_substring_length = 1000; if (e.tagName.toLowerCase() == "input" && e.type == "button") return this.trim(e.value).length > 0 ? e.value.substring(0, max_substring_length) : null; if (e.textContent) return this.trim(e.textContent).length > 0 ? e.textContent.substring(0, max_substring_length) : null; return null; }; this.builders["link"] = function(e) { if (e.nodeName.toLowerCase() == 'a') { var text = e.textContent; if (!text.match(/^\s*$/)) { return text.replace(/\xA0/g, " ").replace(/^\s*(.*?)\s*$/, "$1"); } } return null; }; this.builders["name"] = function(e) { if (e.name) { return e.name; } return null; }; this.builders["xpath_id"] = function(e) { if (e.nodeType != 1) return null; // handle the case of an element with the same id as another element. var idLocator = this.getLocatorId(e); if (idLocator != null && TTW.findElement(idLocator) != e) { return "//*[@" + this.getIdAttribute(e) + "=" + this.attributeValue(this.getLocatorId(e)) + "][2]"; } var path = ''; var current = e.parentNode; var pXPath = null; var parentWithId = null; while (pXPath == null && current != null && current.nodeType == 1 && this.QName(current).indexOf("#") != 0) { //alert("while: " + current + " : " + this.getLocatorId(current)); // find the nearest parent with an id or name if (this.getLocatorId(current) != null) { pXPath = "/" + "/" + this.QName(current) + "[@" + this.getIdAttribute(current) + "=" + this.attributeValue(this.getLocatorId(current)) + "]"; } else { if (current.hasAttribute("name") && current.getAttribute("name") != "") pXPath = "/" + "/" + this.QName(current) + "[@name=" + this.attributeValue(current.getAttribute("name")) + "]"; } if (pXPath != null) parentWithId = current; current = current.parentNode; } if (pXPath != null) { current = e; while ((current != null) && (current != parentWithId) && (current.nodeType == 1) && this.QName(current).indexOf("#") != 0) { var currentPath = '/' + this.QName(current); if (current.parentNode != null) { var childNodes = current.parentNode.childNodes; var total = 0; var index = -1; for (var i = 0; i < childNodes.length; i++) { var child = childNodes[i]; if (child.nodeName == current.nodeName) { if (child == current) index = total; total++; } } if (total > 1 && index >= 0) { currentPath += '[' + (index + 1) + ']'; } } path = currentPath + path; var locator = '/' + path; current = current.parentNode; } if (current != null) | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,531 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: cookieUtils.js****************************************************/function tt_getCookie() { return document.cookie;}function tt_isCookiePresent(name) { /** * Returns true if a cookie with the specified name is present, or false otherwise. * @param name the name of the cookie * @return boolean true if a cookie with the specified name is present, or false otherwise. */ var v = tt_getCookieByName(name); var absent = (v === null); return !absent;} function tt_doCreateCookie(nameValuePair, optionsString) { /** * Create a new cookie whose path and domain are same with those of current page * under test, unless you specified a path for this cookie explicitly. * * @param nameValuePair name and value of the cookie in a format "name=value" * @param optionsString options for the cookie. Currently supported options include 'path', 'max_age' and 'domain'. * the optionsString's format is "path=/path/, max_age=60, domain=.foo.com". The order of options are irrelevant, the unit * of the value of 'max_age' is second. Note that specifying a domain that isn't a subset of the current domain will * usually fail. */ var results = /[^\s=\[\]\(\),"\/\?@:;]+=[^\s=\[\]\(\),"\/\?@:;]*/.test(nameValuePair); if (!results) { // invalid parameter return; } var cookie = nameValuePair.trim(); results = /max_age=(\d+)/.exec(optionsString); if (results) { var expireDateInMilliseconds = (new Date()).getTime() + results[1] * 1000; cookie += "; expires=" + new Date(expireDateInMilliseconds).toGMTString(); } results = /path=([^\s,]+)[,]?/.exec(optionsString); if (results) { var path = results[1]; if ("/" != path) { path = path.replace(/\/$/, ""); } cookie += "; path=" + path; } results = /domain=([^\s,]+)[,]?/.exec(optionsString); if (results) { var domain = results[1]; cookie += "; domain=" + domain; } document.cookie = cookie;}function tt_doDeleteCookie(name, optionsString){ /** * Delete a named cookie with specified path and domain. Be careful; to delete a cookie, you * need to delete it using the exact same path and domain that were used to create the cookie. * If the path is wrong, or the domain is wrong, the cookie simply won't be deleted. Also * note that specifying a domain that isn't a subset of the current domain will usually fail. * * Since there's no way to discover at runtime the original path and domain of a given cookie, * we've added an option called 'recurse' to try all sub-domains of the current domain with * all paths that are a subset of the current path. Beware; this option can be slow. In * big-O notation, it operates in O(n*m) time, where n is the number of dots in the domain * name and m is the number of slashes in the path. * * @param name the name of the cookie to be deleted * @param optionsString options for the cookie. Currently supported options include 'path', 'domain' * and 'recurse.' The optionsString's format is "path=/path/, domain=.foo.com, recurse=true". * The order of options are irrelevant. Note that specifying a domain that isn't a subset of * the current domain will usually fail. */ // set the expire time of the cookie to be deleted to one minute before now. var path = ""; var domain = ""; var recurse = false; var matched = false; results = /path=([^\s,]+)[,]?/.exec(optionsString); if (results) { matched = true; path = results[1]; } results = /domain=([^\s,]+)[,]?/.exec(optionsString); if (results) { matched = true; domain = results[1]; } results = /recurse=([^\s,]+)[,]?/.exec(optionsString); if (results) { matched = true; recurse = results[1]; if ("false" == recurse) { recurse = false; } } // Treat the entire optionsString as a path (for backwards compatibility) if (optionsString && !match | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,532 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: getOutput.js****************************************************//** * handleTask * continueTask * * This is the javascript version of TTAutomationTaskHandler.m handleTask * * -(NSDictionary*) handleTask:(NSString*)taskName task:(NSDictionary*)task */function tta_getOutput(output){ /** * getOutput * * This is the javascript version of TTAutomationTaskHandler.m getOutput * * -(id) getOutput:(NSDictionary *)output error:(NSError **)error */ this.getOutput = function(output) { // output // // command // params { arg1, arg2 } var params = output.params; var arg1 = null; var arg2 = null; if (params != null) { arg1 = params.arg1; arg2 = params.arg2; if (arg1 != null && arg1 != "" && output.command != "output-textPresent" && output.command != "output-eval") { var loc = new TTLocator(); loc.initWithJsonString(arg1); arg1 = loc.serializeShort(); } } switch (output.command) { case "output-isElementChecked": case "output-elementChecked": { return tta_isElementChecked(arg1);; } case "output-isElementPresent": case "output-elementPresent": { return tta_isElementPresent(arg1); } case "output-isElementVisible": case "output-elementVisible": { return tta_isElementVisible(arg1); } case "output-inputValue": case "output-getElementValue": { return tta_getElementValue(arg1); } case "output-elementText": { return tta_getElementText(arg1); } case "output-allAttributeValue": { return tta_getAllAttributeValue(arg1); } case "output-allElementText": { return tta_getAllElementText(arg1); } case "output-htmlSource": { return tta_getHtmlSource(); } case "output-alert": { return tta_getAlertValue(); } case "output-confirmation": { return tta_getConfirmationValue(); } case "output-prompt": { return tta_getPromptValue(); } case "output-bodyText": { return tta_getBodyText(); } case "output-textPresent": { return tta_isTextPresent(arg1); } case "output-eval": { return tta_getEval(arg1); } case "output-innerHTML": { return tta_getInnerHTML(arg1); } case "output-location": { return tta_getLocation(); } case "output-title": { return tta_getTitle(); } case "output-xpathCount": { return tta_getXpathCount(arg1); } case "output-attributeValue": { return tta_getAttributeValue(arg1); } case "output-cookie": { return tt_getCookie(); } case "output-cookieByName": { return tt_getCookieByName(arg1); } case "output-allDropDownOptionLabels": { return tt_getAllDropDownOptionLabels(arg1); } case "output-allDropDownOptionValues": { return tt_getAllDropDownOptionValues(arg1); } // This is an implicit wait used by hybrid, but not exposed as an accessor case "output-elementReadyForAction": { return tta_readyForAction(arg1); } default: return "Unrecognized output: " + output.command; } } // The AUT no longer does the task handling... try { var value = this.getOutput(output); return ttJSON.stringify({value:value}); } catch (exception) { var msg = null; if (typeof exception == "object") { msg = exception.message; } else { msg = exception; } return ttJSON.stringify({value:null,error:{fatal:true,message:msg}}); }} | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,532 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: performAction.js****************************************************//** * handleTask * continueTask * * This is the javascript version of TTAutomationTaskHandler.m handleTask * * -(NSDictionary*) handleTask:(NSString*)taskName task:(NSDictionary*)task */function tta_performAction(task){ this.performAction = function(task) { //tt_log("perform " + task.name, "debug"); var params = task.data.params; var locator = params.arg1; var param2 = params.arg2; var elem = null; var loc = new TTLocator(); loc.initWithJsonString(locator); locator = loc.serializeShort(); switch (task.name) { case "click": case "clickAt": case "doubleClick": case "webClick": case "touchUp": case "type": case "typePassword": case "webType": case "dragAndDrop": case "dragAndDropToObject": case "scroll": case "select": case "addSelection": case "removeSelection": case "assignId": case "check": case "uncheck": case "contextMenu": case "scroll": { // This action type requires an element. // We try to find it using the locator, // but allow up to a minute of "implicit // wait" for it to appear, if it is not // immediately available. //elem = [self findElementWithWait:locator error:&error]; elem = TTW.findElement(locator); if (elem == null) { var msg = "The locator, " + locator + ", did not match any elements."; return ttJSON.stringify({error:{fatal:true,message:msg}}); } break; } } var elem2 = null; switch (task.name) { case "dragAndDropToObject": { // This action type requires an element as the second parameter. // We try to find it using the locator, // but allow up to a minute of "implicit // wait" for it to appear, if it is not // immediately available. //elem = [self findElementWithWait:locator error:&error]; elem2 = TTW.findElement(param2); if (elem2 == null) { // Implicit errors are always fatal.. var msg = "The locator, " + locator + ", did not match any elements."; return ttJSON.stringify({error:{fatal:true,message:msg}}); } break; } } switch (task.name) { case "click": case "webClick": { tta_click(elem, locator); break; } case "doubleClick": { tta_doubleClick(elem); break; } case "clickAt": { tta_clickAt(elem, param2); break; } case "dragAndDrop": { tta_dragAndDrop(elem, param2); break; } case "dragAndDropToObject": { tta_dragAndDropToObject(elem, elem2); break; } case "touchUp": { tta_touchUp(elem); break; } case "type": case "webType": case "typePassword": // passwords have already been decrypted, so we can do a normal type here. { if (param2 != null) { tta_type(elem, param2); } break; } case "contextMenu": { tta_contextMenu(elem); break; } case "select": { tta_select(elem, param2); break; } case "addSelection": { tta_addSelection(elem, param2); break; } case "removeSelection": { tta_removeSelection(elem, param2); break; } case "assignId": { tta_assignId(elem, param2); break; } case "goBack": case "back": { tta_goBack(); break; } case "createCookie": { tt_doCreateCookie(locator, param2); break; } case "deleteCookie": { tt_doDeleteCookie(locator, param2); break; } case | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,533 [main][23] /**************************************************** Copyright 2012-2015 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTWAutomation.js****************************************************///Scripts for TTWfunction TTWAutomation(){}TTWAutomation.prototype.doBlur = function(elem) { if (elem.blur) { elem.blur(); } else { this.triggerEvent(elem, "blur"); }}function tta_doChange(elem) { if (elem.onchange) { elem.onchange(); } else { tta_dispatchEvent(elem, "change"); }}TTWAutomation.prototype.triggerEvent = function(elem, event){ tta_dispatchEvent(elem, event); }function tta_dispatchEvent(element, eventType){ var evt = document.createEvent('HTMLEvents'); if (evt.initEvent) { evt.initEvent(eventType, true, true); element.dispatchEvent(evt); }}//Automation functions to be injected in the AUTfunction tt_log(msg, level){ switch (level) { case "error": alert(msg); break; case "info": //alert(msg); break; case "debug": //alert(msg); break; default: alert(msg); }}function tta_scroll(elem, top, left){ // Perhaps it's a bug in the browser, but I have found that for body only, // this needs to be a number. For other elements, string would work. Also, // for body only, setting left to 0 when it's already 0 causes top to not work. if (elem.scrollTop != Number(top)) elem.scrollTop = Number(top); if (elem.scrollLeft != Number(left)) elem.scrollLeft = Number(left);}function tta_select(elem, optionLocator){ if (elem.type != "date") tta_selectOption(elem, optionLocator) else elem.value = optionLocator;}function tta_findOptionIndex(elem, optionLocator){ if (optionLocator.indexOf("value=") == 0) { var value = optionLocator.substring(6); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (elem.options[ndx].value == value) { return ndx; } } } else if (optionLocator.indexOf("id=") == 0) { var id = optionLocator.substring(3); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (id == elem.options[ndx].getAttribute("id")) { return ndx; } } } else if (optionLocator.indexOf("index=") == 0) { var index = optionLocator.substring(6); return Number(index); } else if (optionLocator.indexOf("text=") == 0) { var text = optionLocator.substring(5); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (elem.options[ndx].text == text) { return ndx; } } } else if (optionLocator.indexOf("label=") == 0) { var label = optionLocator.substring(6); for (var ndx = 0; ndx < elem.options.length; ndx++) { if (elem.options[ndx].text == label) { return ndx; } } }}function tta_goBack(){ window.history.back();}function tta_check(elem){ elem.checked = true;}function tta_uncheck(elem){ elem.checked = false;}function tta_assignId(elem, newID){ elem.setAttribute("id", newID);}function tta_type(elem, value){ var ttw = new TTWAutomation(); elem.value = value; this.doBlur(elem); if (elem.change) { elem.change(); } this.triggerEvent(elem, "change"); //ttw.doType(elem,value);}function tta_isElementChecked(loc){ var element = TTW.findElement(loc); if (element != null) { if (element.checked) { return true; } } return false;}function tta_isElementPresent(loc){ return TTW.findElement(loc) != null;}function tta_isElementVisible(loc){ var element = TTW.findElement(loc); if (element != null) { if (element.offsetWidth > 0 && element.offsetHeight > 0) { if (element.style.display == "none") { return false; } var elementRect = element.getBoundingClientRect(); if (elementRect.top >= 0 && elementRect.left >= 0 && elementRect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && elementRect.right <= (window.innerWidth || document.documentElement.clientWidth)) { retur | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,534 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTWRecorder.js****************************************************/var TTWRecorder = { keydownElem : null, locator : null, isPassword : false, keyboardTab : false, keyboardReturn : false};function tt_onKeyDown(e){ if (e.target != window.top.TTWRecorder.keydownElem) { window.top.TTWRecorder.locator = window.top.TTW.getLocator(e.target, 'all'); window.top.TTWRecorder.keydownElem = e.target; } var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0; if (key == 9) { window.top.TTWRecorder.keyboardTab = true; window.top.document.location.href='ttwr://keyboardTab'; } else if (key == 13) { window.top.TTWRecorder.keyboardReturn = true; window.top.document.location.href='ttwr://keyboardReturn' + '?value=' + encodeURIComponent(e.target.value) + '&locator=' + encodeURIComponent(window.top.TTWRecorder.locator) + pwdParam; } else { window.top.TTWRecorder.isPassword = e.target.getAttribute("type") == "password"; var pwdParam = window.top.TTWRecorder.isPassword ? "&isPassword=true" : ""; window.top.document.location.href='ttwr://pendingType' + '?value=' + encodeURIComponent(e.target.value) + '&locator=' + encodeURIComponent(window.top.TTWRecorder.locator) + pwdParam; }}// Called by nativefunction tt_getScrollPos(elem){ if (!elem) elem = document.body; return ttJSON.stringify({top: elem.scrollTop, left: elem.scrollLeft})}function TTW_addListeners(){ if (window.top.TTW_Options != null && window.top.TTW_Options.os == "iOS") { // In iOS, this can't be done on a timeout or it won't happen in cases where the page is going away (eBay search) document.addEventListener('keydown', function(e){tt_onKeyDown(e)}, true); } else { document.addEventListener('keydown', function(e){setTimeout(function() {tt_onKeyDown(e);}, 10)}, true); }}//This function is called by the TouchTest Web appTTWRecorder.evaluateJavaScript = function(view, script){ var result = eval("(" + script + ")"); if (result != undefined) autJavascriptEvaluator.didFinishEvaluation(view, script, result.toString());}//console.log("JS: TTWRecorder END"); | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,534 [main][23] /**************************************************** Copyright 2012-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TouchTestLocator.js****************************************************//** * TouchTestLocator */function TouchTestLocator(){}// Mobile web allows a tolerance of 15px when tapping on small items like// checkboxes and radios.TouchTestLocator.touchTolerance = 15;/** * This function is used by TTD for Touch Locator on Hybrid app */TouchTestLocator.inspectWithLocator = function(locator, bPositionOnly){ try { locator = unescape(locator); var target = TTW.findElement(locator); var position = target.getBoundingClientRect(); var output; if (bPositionOnly) { output = ttJSON.stringify({ "x" : "" + position.left, "y" : "" + position.top, "w" : "" + position.width, "h" : "" + position.height, "type" : "" + target.getAttribute("type") }); } else { output = ttJSON.stringify({ "locators" : TTW.getLocator(target, 'all'), "tagName" : "" + target.tagName, "x" : "" + position.left, "y" : "" + position.top, "w" : "" + position.width, "h" : "" + position.height, "type" : "" + target.getAttribute("type") }); } if (window.top.touchLocatorJavascriptOutputEvaluator) window.top.touchLocatorJavascriptOutputEvaluator.didFinishOutputEvaluation("inspectWithLocator", output); else return output; } catch (e) { return "Exception in inspectWithLocator: " + e.message + "\n" + e.stack; } }// This will return a message as a locator from inspectWithPoint. Used only for debugging!!TouchTestLocator.inspectWithPointLogging = function(msg){// var metas = document.getElementsByTagName('meta');// for (i=0; i<metas.length; i++) {// if (metas[i].name == "viewport") {// metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";// }// } var output = ttJSON.stringify({ "locators" : {"selected":"default","locators":{"default":"elem: " + msg, "xpath":{}}}, "tagName" : "iframe", "x" : "0", "y" : "0", "w" : "0", "h" : "0", "type" : ""});}/** * This function is used by TTD for Touch Locator on Hybrid app */TouchTestLocator.inspectWithPoint = function(x, y){ //return TouchTestLocator.inspectWithPointLogging(); try { var target = document.elementFromPoint(x, y); if (target.nodeName.toLowerCase() == "form") { // Let's see if we clicked close enough to one of the form inputs... var inputs = target.getElementsByTagName("input"); for (var i=0; i<inputs.length; ++i) { var inputType = inputs[i].getAttribute("type"); if (inputType == "checkbox" || inputType == "radio") { var inputPos = inputs[i].getBoundingClientRect(); if (Math.abs(x - (inputPos.width + inputPos.left)) < TouchTestLocator.touchTolerance && Math.abs(y - (inputPos.height + inputPos.top)) < TouchTestLocator.touchTolerance) { // Changing the target element to be the input target = inputs[i]; break; } } } } if (target.nodeName.toLowerCase() == "iframe" && target.contentWindow.TouchTestLocator != null) // This will be null for cross-domain iframes { try { // Translate the point to the iframe var framePosition = target.getBoundingClientRect(); var xinframe = x - framePosition.left; var yinframe = y - framePosition.top; return target.contentWindow.TouchTestLocator.inspectWithPoint(xinframe, yinframe); } catch (e) { var output = ttJSON.stringify({ "locators" : {"selected":"default","locators":{"default":e.message, "xpath":{}}}, "tagName" : "iframe", "x" | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,535 [main][23] /**************************************************** Copyright 2013-2014 SOASTA, Inc.* All rights reserved.* Proprietary and confidential.** File: TTWinit.js****************************************************///This is the last script that is loaded from (ttw_autScripts)TTW.init();window.top.TTW.loaded = true;window.debugLoaded = true; | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,535 [main][23] | |
[INFO] : [Nexus 5] TouchTestDriver: 10:28:55,535 [main][23] Set the page load to (thread: main): true | |
[DEBUG] : [Nexus 5] processAndroid16AndMore: (main) [1183,3967] class name: com.android.webview.chromium.WebViewChromium, class com.android.webview.chromium.WebViewChromium | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,536 [main][23] TTWebViewClientWrapper.injectIfRequired from ajbefore WebView_loadUrl("javascript:function checkForJSCode(){var a=TiApp.hasResult();-1!=a?1==a&&(a=TiApp.getJSCode(),void 0!=a?eval(a+""):clearInterval(refreshIntervalId)):clearInterval(refreshIntervalId)}var refreshIntervalId=setInterval(checkForJSCode,250); | |
[DEBUG] : [Nexus 5] TouchTestDriver: ") with client ti.modules.titanium.ui.widget.webview.TiWebViewClient@ea0896c with attached = ti.modules.titanium.ui.widget.webview.TiWebViewClient@ea0896c of class ti.modules.titanium.ui.widget.webview.TiWebViewClient | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,536 [main][23] ti.modules.titanium.ui.widget.webview.TiWebViewClient is already cached and can be handled. | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,536 [main][23] Adding TTD Javascript interfaces | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,537 [main][23] ti.modules.titanium.ui.widget.webview.TiWebViewClient does not need TTW Client wrapping. | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,541 [main][23] Loading and evaluating 0 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,542 [main][23] Loading and evaluating 1 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,545 [main][23] Loading and evaluating 2 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,545 [main][23] Loading and evaluating 3 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,546 [main][23] Loading and evaluating 4 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,546 [main][23] Loading and evaluating 5 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,547 [main][23] Loading and evaluating 6 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,547 [main][23] Loading and evaluating 7 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,548 [main][23] Loading and evaluating 8 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,548 [main][23] Loading and evaluating 9 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,550 [main][23] Loading and evaluating 10 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,551 [main][23] Loading and evaluating 11 | |
[DEBUG] : [Nexus 5] TouchTestDriver: 10:28:55,551 [main][23] Loading and evaluating 12 | |
[INFO] : [Nexus 5] I/TiWebChromeClient.console: (main) [42,4009] Mixed Content: The page at 'https://expirebox.com/' was loaded over HTTPS, but requested an insecure script 'ttw://TouchTestWebInnerFrameScripts__Combined.js'. This request has been blocked; the content must be served over HTTPS. (1:) | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,032 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/platform/plugin/tab/renderer/?dpr=1 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,040 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/platform/plugin/page/logging/?dpr=1 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,089 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/pages/call_to_action/fetch_dialog_data/?id=1135653046454205&surface=pagePlugin&unit_type=VIEWER&dpr=1 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,091 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yv/r/WBT-DscwgVI.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,095 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yN/r/WgFKRx0VFOG.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,099 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yV/r/lywtL8I2JI4.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,229 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yG/l/0,cross/tNpwTmp7f_G.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,232 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yR/l/0,cross/j52t_cevxA6.css | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,234 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yH/r/ve62ZmMBXQJ.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,242 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yb/r/LXxoXtDwgh-.js | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,314 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/p50x50/23795054_1446049158847190_1640181992684436296_n.jpg?oh=ff8d546a6d57e8ea96020ddc680778f4&oe=5B1DA272 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,317 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/p50x50/23844889_514648322232006_7163925879777228799_n.jpg?oh=d994522e00c11b338de78ed58cf597e6&oe=5B1F89B0 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,331 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/c0.13.50.50/p50x50/17884680_1235218499929747_4446605446317706342_n.jpg?oh=7fc2810502ffddb438436b00f057df56&oe=5B0AA4C2 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/p50x50/27066956_2027723440825623_3723733330730625355_n.jpg?oh=36cbbe54f7912a2f69b3d3eafbf53a19&oe=5B4CD79A | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/p50x50/23434764_1186012268167404_302176694373503162_n.jpg?oh=0d66f917a4813973da63a46efef7e554&oe=5B1D72C8 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/c0.0.50.50/p50x50/27858425_1769097643141579_4701652880105355034_n.jpg?oh=f8981ef83f784cf4891c772b912ff5f5&oe=5B0C7A31 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://external.fsnc1-1.fna.fbcdn.net/safe_image.php?d=AQC3Y0FW4IeZicGP&w=160&h=160&url=http%3A%2F%2Ffontspedia.org%2Fimage.png&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&_nc_hash=AQBjSk1Ef_wrQroN | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://external.fsnc1-1.fna.fbcdn.net/safe_image.php?d=AQAbCyALSk4HYdyc&w=301&h=158&url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2F26DMXULrTfL0IW2UU%2Fgiphy.gif&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&_nc_hash=AQCKjzWxOGsktDsQ | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://external.fsnc1-1.fna.fbcdn.net/safe_image.php?d=AQB6LQlSUmq2PkyJ&w=301&h=158&url=http%3A%2F%2Ffreeantivirus.pro%2Fimage.png&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&_nc_hash=AQBmytIYR-hKqLML | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,332 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://external.fsnc1-1.fna.fbcdn.net/safe_image.php?d=AQDSegW6Mb1ioeWW&w=301&h=158&url=http%3A%2F%2Fnickego.com%2Fimage.png&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&_nc_hash=AQD7ZmCFgB3Vo_9I | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,333 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yS/r/wre3OnfEFeo.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,333 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://www.facebook.com/rsrc.php/v3/yH/r/yNvz5xtKREW.png | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,370 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/p50x50/22815613_507469046273583_434581969081337712_n.jpg?oh=1dedcaff66350e74caa75f453fa5d538&oe=5B0C4383 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,379 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://scontent.fsnc1-1.fna.fbcdn.net/v/t1.0-1/c8.0.50.50/p50x50/10177522_1375684852722179_805306286767185905_n.jpg?oh=c2ef33017e7910b9f4f1739943baedbf&oe=5B17C978 | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:05,379 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2112 #3}, https://external.fsnc1-1.fna.fbcdn.net/safe_image.php?d=AQAtHnphV3q8W7Mb&w=301&h=158&url=http%3A%2F%2Fweathermetro.com%2Fpublic%2Ficon.png&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&_nc_hash=AQAWhUpZjY-ziaTc | |
[DEBUG] : [Nexus 6P] TouchTestDriver: 10:29:22,844 [main][26] onLoadResource ti.modules.titanium.ui.widget.webview.TiUIWebView$NonHTCWebView{23df8de VFEDHVCL. .F...... 0,0-1440,2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment