Added more commands from the JSONWireProtocol.

This commit is contained in:
jvelilla
2013-04-23 08:26:02 -03:00
parent 3c41ca0864
commit 9e8548d65a
3 changed files with 290 additions and 26 deletions

View File

@@ -730,8 +730,135 @@ feature -- Commands
end
end
element_click (a_session_id: STRING_32; id : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_post (cmd_session_element_click (a_session_id,id),Void)
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
element_submit (a_session_id: STRING_32; id : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_post (cmd_session_element_submit (a_session_id,id),Void)
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
element_text (a_session_id: STRING_32; id : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_get (cmd_session_element_text (a_session_id,id))
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
send_events (a_session_id: STRING_32; id : STRING_32; data : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_post (cmd_session_element_event (a_session_id,id),data)
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
send_key_strokes (a_session_id: STRING_32; data : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_post (cmd_session_keys (a_session_id),data)
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
query_by_tag_name (a_session_id: STRING_32; id : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_get (cmd_session_element_name (a_session_id,id))
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
clear_element (a_session_id: STRING_32; id : STRING_32) : SE_RESPONSE
require
selinum_server_available: is_available
local
resp: HTTP_CLIENT_RESPONSE
do
create Result.make_empty
resp := execute_post (cmd_session_element_clear (a_session_id,id), Void)
if resp.status = 204 then
Result.set_status (0)
Result.set_session_id (a_session_id)
else
if attached resp.body as l_body then
Result := new_response (l_body)
end
end
end
feature {NONE} -- Implementation
execute_get (command_name: STRING_32): HTTP_CLIENT_RESPONSE

View File

@@ -1106,14 +1106,25 @@ feature -- Commands
has_valid_strategy : (create {SE_BY}).is_valid_strategy (strategy)
local
resp : SE_RESPONSE
index : INTEGER
do
if commnad_executor.is_available then
resp := commnad_executor.search_element_id_elements (a_session_id,an_id,strategy)
check_response (resp)
if not has_error then
-- if attached {JSON_OBJECT} resp.value as l_value and then attached l_value.item ("ELEMENT") as l_elem then
-- create Result.make (l_elem.representation)
-- end
if not has_error then
if attached resp.value as l_value and then attached {JSON_ARRAY} string_to_json (l_value) as l_json_array then
create {ARRAYED_LIST [WEB_ELEMENT]} Result.make (10)
from
index := 1
until
index > l_json_array.count
loop
if attached {JSON_OBJECT} l_json_array.i_th (index) as json_str and then attached json_str.item ("ELEMENT") as l_elem then
Result.force (create {WEB_ELEMENT}.make (l_elem.representation))
end
index := index + 1
end
end
end
end
@@ -1129,7 +1140,13 @@ feature -- Commands
-- NoSuchWindow - If the currently selected window has been closed.
-- StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.
-- ElementNotVisible - If the referenced element is not visible on the page (either is hidden by CSS, has 0-width, or has 0-height)
local
resp: SE_RESPONSE
do
if commnad_executor.is_available then
resp := commnad_executor.element_click (a_session_id,an_id)
check_response (resp)
end
end
element_submit (a_session_id: STRING_32; an_id: STRING_32)
@@ -1141,10 +1158,16 @@ feature -- Commands
-- Potential Errors:
-- NoSuchWindow - If the currently selected window has been closed.
-- StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.
local
resp : SE_RESPONSE
do
if commnad_executor.is_available then
resp := commnad_executor.element_submit (a_session_id,an_id)
check_response (resp)
end
end
element_text (a_session_id: STRING_32; an_id: STRING_32)
element_text (a_session_id: STRING_32; an_id: STRING_32) : detachable STRING_32
-- GET /session/:sessionId/element/:id/text
-- Returns the visible text for the element.
-- URL Parameters:
@@ -1153,10 +1176,21 @@ feature -- Commands
-- Potential Errors:
-- NoSuchWindow - If the currently selected window has been closed.
-- StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.
local
resp: SE_RESPONSE
do
if commnad_executor.is_available then
resp := commnad_executor.element_text (a_session_id, an_id)
check_response (resp)
if not has_error then
if attached resp.value as l_value then
Result := l_value
end
end
end
end
send_event (a_session_id: STRING_32; an_id: STRING_32)
send_event (a_session_id: STRING_32; an_id: STRING_32; events : ARRAY[STRING_32])
-- POST /session/:sessionId/element/:id/value
-- Send a sequence of key strokes to an element.
-- Any UTF-8 character may be specified, however, if the server does not support native key events,
@@ -1193,22 +1227,48 @@ feature -- Commands
-- NoSuchWindow - If the currently selected window has been closed.
-- StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.
-- ElementNotVisible - If the referenced element is not visible on the page (either is hidden by CSS, has 0-width, or has 0-height)
do
end
local
resp: SE_RESPONSE
l_json : STRING_32
do
l_json := "[
{"value":$array}
]"
if commnad_executor.is_available then
if attached json.value (create {ARRAYED_LIST[STRING_32]}.make_from_array(events)) as l_array then
l_json.replace_substring_all ("$array", l_array.representation)
resp := commnad_executor.send_events (a_session_id, an_id, l_json)
check_response (resp)
end
end
end
send_key_strokes (a_session_id: STRING_32)
send_key_strokes (a_session_id: STRING_32 ; keys : ARRAY[STRING_32])
-- POST /session/:sessionId/keys
-- Send a sequence of key strokes to the active element. This command is similar to the send keys command in every aspect except the implicit termination: The modifiers are not released at the end of the call. Rather, the state of the modifier keys is kept between calls, so mouse interactions can be performed while modifier keys are depressed.
-- URL Parameters:
-- :sessionId - ID of the session to route the command to.
-- JSON Parameters:
-- value - {Array.<string>} The keys sequence to be sent. The sequence is defined in thesend keys command.
-- value - {Array.<string>} The keys sequence to be sent. The sequence is defined in the send keys command.
-- Potential Errors:
-- NoSuchWindow - If the currently selected window has been closed.
do
end
local
resp: SE_RESPONSE
l_json : STRING_32
do
l_json := "[
{"value":$array}
]"
if commnad_executor.is_available then
if attached json.value (create {ARRAYED_LIST[STRING_32]}.make_from_array(keys)) as l_array then
l_json.replace_substring_all ("$array", l_array.representation)
resp := commnad_executor.send_key_strokes (a_session_id, l_json)
check_response (resp)
end
end
end
query_by_tag_name (a_session_id: STRING_32; an_id: STRING_32)
query_by_tag_name (a_session_id: STRING_32; an_id: STRING_32) : detachable STRING_32
-- GET /session/:sessionId/element/:id/name
-- Query for an element's tag name.
-- URL Parameters:
@@ -1219,10 +1279,21 @@ feature -- Commands
-- Potential Errors:
-- NoSuchWindow - If the currently selected window has been closed.
-- StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.
local
resp: SE_RESPONSE
do
if commnad_executor.is_available then
resp := commnad_executor.query_by_tag_name (a_session_id, an_id)
check_response (resp)
if not has_error then
if attached resp.value as l_value then
Result := l_value
end
end
end
end
clear (a_session_id: STRING_32; an_id: STRING_32)
clear_element (a_session_id: STRING_32; an_id: STRING_32)
-- POST /session/:sessionId/element/:id/clear
-- Clear a TEXTAREA or text INPUT element's value.
-- URL Parameters:
@@ -1233,10 +1304,16 @@ feature -- Commands
-- StaleElementReference - If the element referenced by :id is no longer attached to the page's DOM.
-- ElementNotVisible - If the referenced element is not visible on the page (either is hidden by CSS, has 0-width, or has 0-height)
-- InvalidElementState - If the referenced element is disabled.
local
resp: SE_RESPONSE
do
if commnad_executor.is_available then
resp := commnad_executor.clear_element (a_session_id, an_id)
check_response (resp)
end
end
is_selected (a_session_id: STRING_32; an_id: STRING_32)
is_selected (a_session_id: STRING_32; an_id: STRING_32) : BOOLEAN
-- GET /session/:sessionId/element/:id/selected
-- Determine if an OPTION element, or an INPUT element of type checkbox or radiobutton is currently selected.
-- URL Parameters:
@@ -1250,7 +1327,7 @@ feature -- Commands
do
end
is_enabled (a_session_id: STRING_32; an_id: STRING_32)
is_enabled (a_session_id: STRING_32; an_id: STRING_32) : BOOLEAN
-- GET /session/:sessionId/element/:id/enabled
-- Determine if an element is currently enabled.
-- URL Parameters:
@@ -1264,7 +1341,7 @@ feature -- Commands
do
end
element_value (a_session_id: STRING_32; an_id: STRING_32; a_name: STRING_32)
element_value (a_session_id: STRING_32; an_id: STRING_32; a_name: STRING_32) : detachable STRING_32
-- GET /session/:sessionId/element/:id/attribute/:name
-- Get the value of an element's attribute.
-- URL Parameters:
@@ -1278,7 +1355,7 @@ feature -- Commands
do
end
elements_equals (a_session_id: STRING_32; an_id: STRING_32; an_other: STRING_32)
elements_equals (a_session_id: STRING_32; an_id: STRING_32; an_other: STRING_32) : BOOLEAN
-- GET /session/:sessionId/element/:id/equals/:other
-- Test if two element IDs refer to the same DOM element.
-- URL Parameters:

View File

@@ -293,15 +293,75 @@ feature
end
cmd_session_element_click_tmpl : STRING ="session/$sessionId/element/$id/click"
cmd_session_element_click (sessionId: STRING_32; id : STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_element_click_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
Result.replace_substring_all ("$id", id)
end
cmd_session_element_submit_tmpl : STRING ="session/$sessionId/element/$id/submit"
cmd_session_element_submit (sessionId: STRING_32; id : STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_element_submit_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
Result.replace_substring_all ("$id", id)
end
cmd_session_element_text_tmpl : STRING ="session/$sessionId/element/$id/text"
cmd_session_element_text (sessionId: STRING_32; id : STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_element_text_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
Result.replace_substring_all ("$id", id)
end
cmd_session_element_event_tmpl : STRING ="session/$sessionId/element/$id/value"
cmd_session_element_event (sessionId: STRING_32; id : STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_element_event_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
Result.replace_substring_all ("$id", id)
end
cmd_session_keys_tmpl : STRING ="session/$sessionId/keys"
cmd_session_keys (sessionId: STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_keys_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
end
cmd_session_element_name_tmpl : STRING ="session/$sessionId/element/$id/name"
cmd_session_element_name (sessionId: STRING_32; id : STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_element_name_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
Result.replace_substring_all ("$id", id)
end
cmd_session_element_clear_tmpl : STRING ="session/$sessionId/element/$id/clear"
cmd_session_element_clear (sessionId: STRING_32; id : STRING_32 ): STRING_32
do
create Result.make_from_string (cmd_session_element_name_tmpl)
Result.replace_substring_all ("$sessionId", sessionId)
Result.replace_substring_all ("$id", id)
end
--POST /session/:sessionId/element/:id/elements Search for multiple elements on the page, starting from the identified element.
--POST /session/:sessionId/element/:id/click Click on an element.
--POST /session/:sessionId/element/:id/submit Submit a FORM element.
--GET /session/:sessionId/element/:id/text Returns the visible text for the element.
--POST /session/:sessionId/element/:id/value Send a sequence of key strokes to an element.
--POST /session/:sessionId/keys Send a sequence of key strokes to the active element.
--GET /session/:sessionId/element/:id/name Query for an element's tag name.
--POST /session/:sessionId/element/:id/clear Clear a TEXTAREA or text INPUT element's value.
--GET /session/:sessionId/element/:id/selected Determine if an OPTION element, or an INPUT element of type checkbox or radiobutton is currently selected.
--GET /session/:sessionId/element/:id/enabled Determine if an element is currently enabled.
--GET /session/:sessionId/element/:id/attribute/:name Get the value of an element's attribute.