{"action":"created","comment":{"url":"https://api.github.com/repos/DevExpress/testcafe/pulls/comments/57680359","id":57680359,"diff_hunk":"@@ -1,50 +1,50 @@\n-'@fixture click';\r\n-'@page ./index.html';\r\n-\r\n-\r\n-var userAgent = window.navigator.userAgent.toLowerCase();\r\n-var isMSEdge  = !!/edge\\//.test(userAgent);\r\n-\r\n-var isIE11 = !!(navigator.appCodeName === 'Mozilla' &&\r\n-                /trident\\/7.0/.test(userAgent));\r\n-\r\n-\r\n-'@test'['Pointer events test (T191183) [ONLY:ie]'] = {\r\n-    '1.Bind pointer event handlers and call click': function () {\r\n-        var input  = $('#input')[0];\r\n-        var shared = this;\r\n-\r\n-        shared.events = [];\r\n-\r\n-        function pointerHandler (e) {\r\n-            shared.events.push(e.type.toLowerCase().replace('ms', ''));\r\n-\r\n-            eq(e.pointerType, isIE11 || isMSEdge ? 'mouse' : 4);\r\n-            eq(e.button, 0);\r\n-            eq(e.buttons, 1);\r\n-        }\r\n-\r\n-        if (isMSEdge) {\r\n-            input.onpointerdown = pointerHandler;\r\n-            input.onpointerup   = pointerHandler;\r\n-        }\r\n-        else {\r\n-            input.onmspointerdown = pointerHandler;\r\n-            input.onmspointerup   = pointerHandler;\r\n-        }\r\n-\r\n-        act.click(input);\r\n-    },\r\n-\r\n-    '2.Check that handlers were called': function () {\r\n-        eq(this.events, ['pointerdown', 'pointerup']);\r\n-    }\r\n-};\r\n-\r\n-'@test'['Should fail if the first argument is invisible'] = {\r\n-    '1.Click on invisible element': function () {\r\n-        var $input = $('#input').css('visibility', 'hidden');\r\n-\r\n-        act.click($input);\r\n-    }\r\n-};\r\n+'@fixture click';\n+'@page ./index.html';\n+\n+\n+var userAgent = window.navigator.userAgent.toLowerCase();\n+var isMSEdge  = !!/edge\\//.test(userAgent);\n+\n+var isIE11 = !!(navigator.appCodeName === 'Mozilla' &&\n+                /trident\\/7.0/.test(userAgent));\n+\n+","path":"test/functional/fixtures/api/legacy/click/testcafe-fixtures/click.test.js","position":61,"original_position":61,"commit_id":"d4ff8c02e71de1dc376b30ff34ad1241a6eae3f8","original_commit_id":"d4ff8c02e71de1dc376b30ff34ad1241a6eae3f8","user":{"login":"miherlosev","id":4133518,"avatar_url":"https://avatars.githubusercontent.com/u/4133518?v=3","gravatar_id":"","url":"https://api.github.com/users/miherlosev","html_url":"https://github.com/miherlosev","followers_url":"https://api.github.com/users/miherlosev/followers","following_url":"https://api.github.com/users/miherlosev/following{/other_user}","gists_url":"https://api.github.com/users/miherlosev/gists{/gist_id}","starred_url":"https://api.github.com/users/miherlosev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miherlosev/subscriptions","organizations_url":"https://api.github.com/users/miherlosev/orgs","repos_url":"https://api.github.com/users/miherlosev/repos","events_url":"https://api.github.com/users/miherlosev/events{/privacy}","received_events_url":"https://api.github.com/users/miherlosev/received_events","type":"User","site_admin":false},"body":"Can we use hammerhead browser utils?","created_at":"2016-03-29T07:10:18Z","updated_at":"2016-03-29T07:10:18Z","html_url":"https://github.com/DevExpress/testcafe/pull/405#discussion_r57680359","pull_request_url":"https://api.github.com/repos/DevExpress/testcafe/pulls/405","_links":{"self":{"href":"https://api.github.com/repos/DevExpress/testcafe/pulls/comments/57680359"},"html":{"href":"https://github.com/DevExpress/testcafe/pull/405#discussion_r57680359"},"pull_request":{"href":"https://api.github.com/repos/DevExpress/testcafe/pulls/405"}}},"pull_request":{"url":"https://api.github.com/repos/DevExpress/testcafe/pulls/405","id":63686569,"html_url":"https://github.com/DevExpress/testcafe/pull/405","diff_url":"https://github.com/DevExpress/testcafe/pull/405.diff","patch_url":"https://github.com/DevExpress/testcafe/pull/405.patch","issue_url":"https://api.github.com/repos/DevExpress/testcafe/issues/405","number":405,"state":"open","locked":false,"title":"client-driver implementation (#263)","user":{"login":"AlexanderMoskovkin","id":12047804,"avatar_url":"https://avatars.githubusercontent.com/u/12047804?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexanderMoskovkin","html_url":"https://github.com/AlexanderMoskovkin","followers_url":"https://api.github.com/users/AlexanderMoskovkin/followers","following_url":"https://api.github.com/users/AlexanderMoskovkin/following{/other_user}","gists_url":"https://api.github.com/users/AlexanderMoskovkin/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexanderMoskovkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexanderMoskovkin/subscriptions","organizations_url":"https://api.github.com/users/AlexanderMoskovkin/orgs","repos_url":"https://api.github.com/users/AlexanderMoskovkin/repos","events_url":"https://api.github.com/users/AlexanderMoskovkin/events{/privacy}","received_events_url":"https://api.github.com/users/AlexanderMoskovkin/received_events","type":"User","site_admin":false},"body":"/cc @inikulin \r\n\r\nThis PR accomplish the following from [here](https://github.com/DevExpress/testcafe/issues/263#issuecomment-192261711):\r\n\r\n## Client driver\r\n- [x] Create `src/client/driver` lib.\r\n- [x] Driver waits page ready event and sends `ready` hanging message to test run\r\n- [x] Once it get's message it executes appropriate automation/assertion\r\n- [x] Save `executingCommand` flag to `true` and run automation\r\n- [x] Set xhr barrier\r\n- [x] Set page load barrier\r\n- [x] If page not unloaded then send `ready` with the success status, set  `executingCommand` flag to `false` \r\n- [x] If we have a new page load, check `executingCommand` flag, if it's true, repeat actions from the step above.\r\n\r\n\r\n## Processing commands\r\n- [x] Commands should be defined as classes for the clarity, so we will have defined set of fields\r\n- [x] On client we will need to get elements from selectors contained in command, for this we should use our querying mechanism (try to obtain element within 10 seconds).\r\n\r\nI'd like to accomplish page load barrier in a separate PR because this PR is heavy already. ","created_at":"2016-03-22T08:52:58Z","updated_at":"2016-03-29T07:10:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c47d79d213bb522b7b3b87d4d2f6a1564da644c1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/DevExpress/testcafe/pulls/405/commits","review_comments_url":"https://api.github.com/repos/DevExpress/testcafe/pulls/405/comments","review_comment_url":"https://api.github.com/repos/DevExpress/testcafe/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DevExpress/testcafe/issues/405/comments","statuses_url":"https://api.github.com/repos/DevExpress/testcafe/statuses/d4ff8c02e71de1dc376b30ff34ad1241a6eae3f8","head":{"label":"AlexanderMoskovkin:client-driver","ref":"client-driver","sha":"d4ff8c02e71de1dc376b30ff34ad1241a6eae3f8","user":{"login":"AlexanderMoskovkin","id":12047804,"avatar_url":"https://avatars.githubusercontent.com/u/12047804?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexanderMoskovkin","html_url":"https://github.com/AlexanderMoskovkin","followers_url":"https://api.github.com/users/AlexanderMoskovkin/followers","following_url":"https://api.github.com/users/AlexanderMoskovkin/following{/other_user}","gists_url":"https://api.github.com/users/AlexanderMoskovkin/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexanderMoskovkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexanderMoskovkin/subscriptions","organizations_url":"https://api.github.com/users/AlexanderMoskovkin/orgs","repos_url":"https://api.github.com/users/AlexanderMoskovkin/repos","events_url":"https://api.github.com/users/AlexanderMoskovkin/events{/privacy}","received_events_url":"https://api.github.com/users/AlexanderMoskovkin/received_events","type":"User","site_admin":false},"repo":{"id":40255267,"name":"testcafe-phoenix","full_name":"AlexanderMoskovkin/testcafe-phoenix","owner":{"login":"AlexanderMoskovkin","id":12047804,"avatar_url":"https://avatars.githubusercontent.com/u/12047804?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexanderMoskovkin","html_url":"https://github.com/AlexanderMoskovkin","followers_url":"https://api.github.com/users/AlexanderMoskovkin/followers","following_url":"https://api.github.com/users/AlexanderMoskovkin/following{/other_user}","gists_url":"https://api.github.com/users/AlexanderMoskovkin/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexanderMoskovkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexanderMoskovkin/subscriptions","organizations_url":"https://api.github.com/users/AlexanderMoskovkin/orgs","repos_url":"https://api.github.com/users/AlexanderMoskovkin/repos","events_url":"https://api.github.com/users/AlexanderMoskovkin/events{/privacy}","received_events_url":"https://api.github.com/users/AlexanderMoskovkin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AlexanderMoskovkin/testcafe-phoenix","description":"","fork":true,"url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix","forks_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/forks","keys_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/teams","hooks_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/hooks","issue_events_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/issues/events{/number}","events_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/events","assignees_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/assignees{/user}","branches_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/branches{/branch}","tags_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/tags","blobs_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/git/refs{/sha}","trees_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/statuses/{sha}","languages_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/languages","stargazers_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/stargazers","contributors_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/contributors","subscribers_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/subscribers","subscription_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/subscription","commits_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/commits{/sha}","git_commits_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/git/commits{/sha}","comments_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/comments{/number}","issue_comment_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/issues/comments{/number}","contents_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/contents/{+path}","compare_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/merges","archive_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/downloads","issues_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/issues{/number}","pulls_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/pulls{/number}","milestones_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/milestones{/number}","notifications_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/labels{/name}","releases_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/releases{/id}","deployments_url":"https://api.github.com/repos/AlexanderMoskovkin/testcafe-phoenix/deployments","created_at":"2015-08-05T16:08:05Z","updated_at":"2016-01-25T12:26:54Z","pushed_at":"2016-03-28T15:52:21Z","git_url":"git://github.com/AlexanderMoskovkin/testcafe-phoenix.git","ssh_url":"git@github.com:AlexanderMoskovkin/testcafe-phoenix.git","clone_url":"https://github.com/AlexanderMoskovkin/testcafe-phoenix.git","svn_url":"https://github.com/AlexanderMoskovkin/testcafe-phoenix","homepage":null,"size":24857,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"DevExpress:master","ref":"master","sha":"c02bead6f24d01da3b0006a62775490d5bcd5a13","user":{"login":"DevExpress","id":4243232,"avatar_url":"https://avatars.githubusercontent.com/u/4243232?v=3","gravatar_id":"","url":"https://api.github.com/users/DevExpress","html_url":"https://github.com/DevExpress","followers_url":"https://api.github.com/users/DevExpress/followers","following_url":"https://api.github.com/users/DevExpress/following{/other_user}","gists_url":"https://api.github.com/users/DevExpress/gists{/gist_id}","starred_url":"https://api.github.com/users/DevExpress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DevExpress/subscriptions","organizations_url":"https://api.github.com/users/DevExpress/orgs","repos_url":"https://api.github.com/users/DevExpress/repos","events_url":"https://api.github.com/users/DevExpress/events{/privacy}","received_events_url":"https://api.github.com/users/DevExpress/received_events","type":"Organization","site_admin":false},"repo":{"id":34262857,"name":"testcafe","full_name":"DevExpress/testcafe","owner":{"login":"DevExpress","id":4243232,"avatar_url":"https://avatars.githubusercontent.com/u/4243232?v=3","gravatar_id":"","url":"https://api.github.com/users/DevExpress","html_url":"https://github.com/DevExpress","followers_url":"https://api.github.com/users/DevExpress/followers","following_url":"https://api.github.com/users/DevExpress/following{/other_user}","gists_url":"https://api.github.com/users/DevExpress/gists{/gist_id}","starred_url":"https://api.github.com/users/DevExpress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DevExpress/subscriptions","organizations_url":"https://api.github.com/users/DevExpress/orgs","repos_url":"https://api.github.com/users/DevExpress/repos","events_url":"https://api.github.com/users/DevExpress/events{/privacy}","received_events_url":"https://api.github.com/users/DevExpress/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DevExpress/testcafe","description":"","fork":false,"url":"https://api.github.com/repos/DevExpress/testcafe","forks_url":"https://api.github.com/repos/DevExpress/testcafe/forks","keys_url":"https://api.github.com/repos/DevExpress/testcafe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DevExpress/testcafe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DevExpress/testcafe/teams","hooks_url":"https://api.github.com/repos/DevExpress/testcafe/hooks","issue_events_url":"https://api.github.com/repos/DevExpress/testcafe/issues/events{/number}","events_url":"https://api.github.com/repos/DevExpress/testcafe/events","assignees_url":"https://api.github.com/repos/DevExpress/testcafe/assignees{/user}","branches_url":"https://api.github.com/repos/DevExpress/testcafe/branches{/branch}","tags_url":"https://api.github.com/repos/DevExpress/testcafe/tags","blobs_url":"https://api.github.com/repos/DevExpress/testcafe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DevExpress/testcafe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DevExpress/testcafe/git/refs{/sha}","trees_url":"https://api.github.com/repos/DevExpress/testcafe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DevExpress/testcafe/statuses/{sha}","languages_url":"https://api.github.com/repos/DevExpress/testcafe/languages","stargazers_url":"https://api.github.com/repos/DevExpress/testcafe/stargazers","contributors_url":"https://api.github.com/repos/DevExpress/testcafe/contributors","subscribers_url":"https://api.github.com/repos/DevExpress/testcafe/subscribers","subscription_url":"https://api.github.com/repos/DevExpress/testcafe/subscription","commits_url":"https://api.github.com/repos/DevExpress/testcafe/commits{/sha}","git_commits_url":"https://api.github.com/repos/DevExpress/testcafe/git/commits{/sha}","comments_url":"https://api.github.com/repos/DevExpress/testcafe/comments{/number}","issue_comment_url":"https://api.github.com/repos/DevExpress/testcafe/issues/comments{/number}","contents_url":"https://api.github.com/repos/DevExpress/testcafe/contents/{+path}","compare_url":"https://api.github.com/repos/DevExpress/testcafe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DevExpress/testcafe/merges","archive_url":"https://api.github.com/repos/DevExpress/testcafe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DevExpress/testcafe/downloads","issues_url":"https://api.github.com/repos/DevExpress/testcafe/issues{/number}","pulls_url":"https://api.github.com/repos/DevExpress/testcafe/pulls{/number}","milestones_url":"https://api.github.com/repos/DevExpress/testcafe/milestones{/number}","notifications_url":"https://api.github.com/repos/DevExpress/testcafe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DevExpress/testcafe/labels{/name}","releases_url":"https://api.github.com/repos/DevExpress/testcafe/releases{/id}","deployments_url":"https://api.github.com/repos/DevExpress/testcafe/deployments","created_at":"2015-04-20T13:43:28Z","updated_at":"2016-03-08T14:41:06Z","pushed_at":"2016-03-28T15:52:21Z","git_url":"git://github.com/DevExpress/testcafe.git","ssh_url":"git@github.com:DevExpress/testcafe.git","clone_url":"https://github.com/DevExpress/testcafe.git","svn_url":"https://github.com/DevExpress/testcafe","homepage":null,"size":24999,"stargazers_count":6,"watchers_count":6,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12,"mirror_url":null,"open_issues_count":57,"forks":12,"open_issues":57,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DevExpress/testcafe/pulls/405"},"html":{"href":"https://github.com/DevExpress/testcafe/pull/405"},"issue":{"href":"https://api.github.com/repos/DevExpress/testcafe/issues/405"},"comments":{"href":"https://api.github.com/repos/DevExpress/testcafe/issues/405/comments"},"review_comments":{"href":"https://api.github.com/repos/DevExpress/testcafe/pulls/405/comments"},"review_comment":{"href":"https://api.github.com/repos/DevExpress/testcafe/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DevExpress/testcafe/pulls/405/commits"},"statuses":{"href":"https://api.github.com/repos/DevExpress/testcafe/statuses/d4ff8c02e71de1dc376b30ff34ad1241a6eae3f8"}}}}