1 module test;
2 
3 import selenium.api;
4 import std.stdio;
5 import vibe.data.json;
6 
7 import std.datetime;
8 
9 @("Test the selenium api implementation")
10 unittest {
11 	import trial.step;
12 
13   auto url1 = "https://www.amazon.com/All-Light-We-Cannot-See/dp/1476746583/";
14   auto url2 = "https://www.amazon.com/The-Boys-Boat-Americans-Olympics/dp/0143125478/";
15 
16   Step("driver connection");
17   auto connector = new SeleniumApiConnector("http://127.0.0.1:4444/wd/hub", Capabilities.chrome);
18   auto session = connector.api;
19 
20   session.timeouts(TimeoutType.script, 10_000);
21   session.timeouts(TimeoutType.implicit, 10_000);
22   session.timeouts(TimeoutType.pageLoad, 10_000);
23 
24   Step("window handle");
25   string handle = session.windowHandle;
26   writeln("windowHandle: ",  handle);
27   writeln("windowHandles: ", session.windowHandles);
28 
29   Step("navigation");
30   assert(session.url(url1).url == url1);
31   assert(session.url(url1).wait(1000).url(url2).back.wait(1000).url == url1);
32   assert(session.forward.wait(1000).url == url2);
33   assert(session.refresh.wait(1000).url == url2);
34 
35 
36   Step("Javascript execution");
37   assert(session.execute!int("return 1+1") == 2);
38 
39   Json params = Json.emptyArray;
40   params ~= 1;
41   params ~= 2;
42   assert(session.execute!int("return arguments[0] + arguments[1]", params) == 3);
43 
44   assert(session.executeAsync!int("arguments[0](1+1)") == 2);
45   assert(session.executeAsync!int("arguments[2](arguments[0] + arguments[1])", params) == 3);
46 
47 
48   Step("screenshot");
49   session.screenshot;
50 
51   /* not suported by chrome
52   writeln("available_engines: ", session.imeAvailableEngines);
53   writeln("active_engine: ", session.imeActiveEngine);
54   writeln("active_engine: ", session.imeActivated);
55   writeln("active_engine: ", session.imeDeactivate);
56   writeln("active_engine: ", session.imeActivate);
57   */
58 
59   Step("frames");
60   session.frame(1);
61   //session.frameParent;
62   //session.selectWindow("testOpen");
63   //session.windowClose();
64 
65   Step("windows");
66   assert(session.windowSize(Size(400, 500)).windowSize == Size(400, 500));
67 
68   session.windowMaximize;
69   assert(session.windowSize != Size(400, 500));
70 
71   assert(session.cookie.length > 0);
72 
73   Step("cookies");
74   auto cookie = Cookie("test", "value");
75   session.setCookie(cookie);
76   session.deleteCookie("test");
77   session.deleteAllCookies;
78 
79 
80   Step("source");
81   assert(session.source != "");
82 
83   session.url("http://wfmu.org/playlists/LM");
84   assert(session.title == "WFMU: This Is The Modern World with Trouble: Playlists and Archives");
85 
86   Step("selectors");
87   auto elem = ElementLocator(LocatorStrategy.ClassName, "ui-dialog");
88   session.element(elem);
89 
90   auto elem2 = ElementLocator(LocatorStrategy.CssSelector, ".showList ul");
91   session.elements(elem2);
92   session.element(elem2);
93 
94   auto elem3 = ElementLocator(LocatorStrategy.TagName, "li");
95   session.elementsFromElement(session.element(elem2).ELEMENT, elem3);
96 
97   session.activeElement;
98 
99   auto elem4 = ElementLocator(LocatorStrategy.LinkText, "View Trouble's profile");
100   session.clickElement(session.element(elem4).ELEMENT);
101   session.wait(1000);
102   assert(session.url == "http://www.wfmu.org/profile/686399632/Trouble");
103 
104   session.url("http://szabobogdan.com/ro.php");
105   auto elem5 = ElementLocator(LocatorStrategy.ClassName, "mailForm");
106   session.submitElement(session.element(elem5).ELEMENT);
107   session.wait(1000);
108   session.alertText();
109   session.acceptAlert();
110 
111   auto elem6 = ElementLocator(LocatorStrategy.CssSelector, "#contact h2");
112   assert(session.elementText(session.element(elem6).ELEMENT) == "Contact");
113 
114   auto elem7 = ElementLocator(LocatorStrategy.Id, "formName");
115   auto idElem7 = session.element(elem7).ELEMENT;
116   session.sendKeys(idElem7, ["a", "l", "e"]);
117 
118   session.sendKeysToActiveElement(["2", "t"]);
119 
120   session.elementValue(idElem7, "value");
121 
122   assert(session.elementName(idElem7) == "input");
123 
124   session.clearElementValue(idElem7);
125   assert(session.elementValue(idElem7, "value") == "");
126 
127   session.url(url1);
128   auto elem8 = ElementLocator(LocatorStrategy.CssSelector, "#quantity option");
129   auto idElem8 = session.element(elem8).ELEMENT;
130   assert(session.elementSelected(idElem8));
131 
132   assert(session.elementEnabled(idElem8));
133 
134   auto elem9 = ElementLocator(LocatorStrategy.CssSelector, "#quantity");
135   auto elem9bis = ElementLocator(LocatorStrategy.XPath, ".//*[@id='quantity']");
136   auto idElem9 = session.element(elem9).ELEMENT;
137   auto idElem9bis = session.element(elem9bis).ELEMENT;
138   assert(session.elementEqualsOther(idElem9, idElem9bis));
139 
140   assert(session.elementDisplayed(idElem9) == true);
141 
142   session.elementLocation(idElem9);
143   session.elementLocationInView(idElem9);
144   session.elementSize(idElem9);
145   session.elementCssPropertyName(idElem9, "display");
146 
147   //session.setOrientation(Orientation.landscape);
148   //assert(session.orientation == Orientation.landscape);
149 
150 
151   Step("alerts");
152   session.executeAsync!string(`prompt("Please enter your name");`);
153   session.wait(1000);
154   session.setPromptText("test").acceptAlert;
155 
156   session.executeAsync!string(`prompt("Please enter your name");`);
157   session.wait(1000);
158   session.dismissAlert;
159 
160   session.moveTo(Position(100, 100));
161   session.moveTo(idElem9);
162   session.moveTo(idElem9, Position(100, 100));
163 
164   session.click(MouseButton.right);
165 
166   session.buttonDown;
167   session.buttonUp;
168   session.doubleClick;
169 
170 /* It's not working with chrome driver. It's too advanced.
171   session.touchClick(idElem9);
172   session.touchDown(Position(100, 100));
173   session.touchUp(Position(100, 100));
174   session.touchMove(Position(200, 200));
175   session.touchScroll(idElem9, Position(200, 200));
176   session.touchScroll(Position(200, 200));
177   session.touchDoubleClick(idElem9);
178   session.touchLongClick(idElem9);
179   session.touchFlick(idElem9, Position(200, 200), 10);
180   session.touchFlick(100, 100);*/
181 
182   Step("geolocation");
183   session.setGeoLocation(GeoLocation!double(12.3, 13.3, 34.4));
184 
185   //Web driver bug. It does not work.
186   //session.geoLocation();
187 
188   Step("local storage");
189   session.setLocalStorage("key1", "val1");
190   session.localStorage();
191   session.localStorage("key1");
192   session.deleteLocalStorage("key1");
193   session.deleteLocalStorage();
194   session.localStorageSize();
195 
196   session.setSessionStorage("key2", "val2");
197   session.sessionStorage("key2");
198   session.sessionStorage();
199   session.deleteSessionStorage("key2");
200   session.deleteSessionStorage();
201 
202   session.log(LogType.browser);
203   session.logTypes();
204 
205   //session.applicationCacheStatus();
206 
207   connector.connection.disconnect;
208 }