diff --git a/library/test/selenium/examples/example_search.e b/library/test/selenium/examples/example_search.e
index 27d089e0..c88fe4d1 100644
--- a/library/test/selenium/examples/example_search.e
+++ b/library/test/selenium/examples/example_search.e
@@ -35,8 +35,11 @@ feature -- Example
if attached web_driver.get_page_tile as l_title then
print ("%NPage title is:" + l_title)
end
- create wait.make (web_driver,0)
- wait.wait ("Eiffel Room")
+
+ -- Google's search is rendered dynamically with JavaScript.
+ -- Wait for the page to load, timeout after 10 seconds
+ create wait.make (web_driver,10)
+ wait.until_when ("Eiffel Room")
if attached web_driver.get_page_tile as l_title then
@@ -45,7 +48,5 @@ feature -- Example
-- close the window
web_driver.window_close
-
-
end
end
diff --git a/library/test/selenium/readme.md b/library/test/selenium/readme.md
index 88828519..163cc476 100644
--- a/library/test/selenium/readme.md
+++ b/library/test/selenium/readme.md
@@ -2,7 +2,7 @@ Eiffel Selenium binding
=================================================
## Overview
-
+Selenium will help you test your web applications effectively and efficiently against a vast number of browsers and platforms.
This client is a binding for the REST API interface defined in the WebDriver protocol http://code.google.com/p/selenium/wiki/JsonWireProtocol.
WARNING this API is still under development, and maybe it will change
@@ -20,8 +20,67 @@ WARNING this API is still under development, and maybe it will change
java -jar selenium-server-standalone-2.32.0.jar
-Dwebdriver.chrome.driver=%PATH_TO%\chromedriver.exe -Dwebdriver.ie.driver=%PATH_TO%\IEDriverServer.exe
-## Getting Started
+## Getting Started Selenium-WebDriver API (Eiffel binding only support (for now) RemoteWebDriver)
+The examples and guide are based on http://docs.seleniumhq.org/docs/03_webdriver.jsp#introducing-the-selenium-webdriver-api-by-example
-TODO
+WebDriver is a tool for automating web application testing, and in particular to verify that they work as expected.
+
+
+ class
+ EXAMPLE_SEARCH
+
+ feature -- Example
+ search
+ local
+ web_driver : WEB_DRIVER
+ wait : WEB_DRIVER_WAIT
+ do
+ --Create a new instance of a Web driver
+ create web_driver.make
+
+ -- Start session with chrome
+ web_driver.start_session_chrome
+
+ -- Go to Google
+ web_driver.to_url ("http://www.google.com/")
+
+ -- Find the text input element by its name
+ if attached web_driver.find_element ((create{SE_BY}).name ("q")) as l_element then
+
+ -- Enter something to search for
+ l_element.send_keys(<<"Eiffel Room">>)
+
+ -- Now submit the form. WebDriver will find the form for us from the element
+ l_element.submit
+
+ end
+ if attached web_driver.get_page_tile as l_title then
+ print ("%NPage title is:" + l_title)
+ end
+
+ -- Google's search is rendered dynamically with JavaScript.
+ -- Wait for the page to load, timeout after 10 seconds
+ create wait.make (web_driver,10)
+ wait.until_when ("Eiffel Room")
+
+
+ if attached web_driver.get_page_tile as l_title then
+ print ("%NPage title is:" + l_title)
+ end
+
+ -- close the window
+ web_driver.window_close
+ end
+ end
+
+
+### Selenium-WebDriver API Commands and Operations
+ Fetching a Page
+ The first thing you’re likely to want to do with WebDriver is navigate to a page.
+
+ web_driver.to_url ("http://www.google.com/")
+
+
+### Locating Elements
diff --git a/library/test/selenium/selenium-safe.ecf b/library/test/selenium/selenium-safe.ecf
index 19b00f12..830e4039 100644
--- a/library/test/selenium/selenium-safe.ecf
+++ b/library/test/selenium/selenium-safe.ecf
@@ -9,6 +9,7 @@
+
/EIFGENs$
diff --git a/library/test/selenium/src/protocol/executor/command_executor.e b/library/test/selenium/src/protocol/executor/command_executor.e
index f21575af..b222f15a 100644
--- a/library/test/selenium/src/protocol/executor/command_executor.e
+++ b/library/test/selenium/src/protocol/executor/command_executor.e
@@ -3,7 +3,7 @@ note
author: ""
date: "$Date$"
revision: "$Revision$"
- EIS: "name=SELINIUM", "protocol=JSONWireProtocol", "src=https://code.google.com/p/selenium/wiki/JsonWireProtocol#Commands"
+ EIS: "name=SELINIUM", "protocol=uri", "src=https://code.google.com/p/selenium/wiki/JsonWireProtocol#Commands"
class
COMMAND_EXECUTOR
diff --git a/library/test/selenium/src/web_driver_wait.e b/library/test/selenium/src/web_driver_wait.e
index c08f2718..c3a450d8 100644
--- a/library/test/selenium/src/web_driver_wait.e
+++ b/library/test/selenium/src/web_driver_wait.e
@@ -6,7 +6,8 @@ note
class
WEB_DRIVER_WAIT
-
+inherit
+ SHARED_EXECUTION_ENVIRONMENT
create
make
feature {NONE} -- Initialization
@@ -21,25 +22,34 @@ feature {NONE} -- Initialization
end
feature -- Access
- wait (condition : STRING)
-
+ -- create another feature to accept a predicate
+ until_when (condition : STRING)
+ --Evaluate the condition until it's true or timing out .
local
found : BOOLEAN
+ l_time1, l_time2 : TIME
+ l_duration : TIME_DURATION
do
+
+ create l_time1.make_now
+ create l_duration.make_by_seconds (duration.as_integer_32)
+
condition.to_lower
from
+ create l_time2.make_now
if attached {STRING_32} web_driver.get_page_tile as l_title then
l_title.to_lower
found := l_title.has_substring (condition)
end
until
- found
+ found or
+ l_time2.relative_duration (l_time1).fine_seconds_count > l_duration.fine_seconds_count
loop
if attached web_driver.get_page_tile as l_title then
l_title.to_lower
found := l_title.has_substring (condition)
-
end
+ create l_time2.make_now
end
end