Skip to content

Instantly share code, notes, and snippets.

@lokeshchdhry
Created February 20, 2018 18:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lokeshchdhry/ff5be17580b2c4333604e4ada8ef2e1d to your computer and use it in GitHub Desktop.
Save lokeshchdhry/ff5be17580b2c4333604e4ada8ef2e1d to your computer and use it in GitHub Desktop.
[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