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 }