Skip to content

Commit df21277

Browse files
committed
Make selenium sendKeys available to the htmlrunner
The Selenium API is unchanging. `sendKeys` duplicated much of the behvaiour of `typeKeys`, and there's no reason to add it to the main interface.
1 parent 3a27973 commit df21277

5 files changed

Lines changed: 102 additions & 138 deletions

File tree

java/client/src/com/thoughtworks/selenium/DefaultSelenium.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,10 +326,6 @@ public void typeKeys(String locator, String value) {
326326
commandProcessor.doCommand("typeKeys", new String[] {locator, value,});
327327
}
328328

329-
public void sendKeys(String locator, String value) {
330-
commandProcessor.doCommand("sendKeys", new String[] {locator, value,});
331-
}
332-
333329
public void setSpeed(String value) {
334330
commandProcessor.doCommand("setSpeed", new String[] {value,});
335331
}

java/client/src/com/thoughtworks/selenium/Selenium.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,15 +1781,4 @@ public interface Selenium {
17811781
* Java keycodes are NOT the same thing as JavaScript keycodes!
17821782
*/
17831783
void keyPressNative(String keycode);
1784-
1785-
/**
1786-
* Simulates keystroke events on the specified element, as though you typed the value key-by-key.
1787-
*
1788-
* Added for the sake of compatibility with Selenium IDE.
1789-
*
1790-
* @param locator an <a href="#locators">element locator</a>
1791-
* @param value the value to type
1792-
*/
1793-
default void sendKeys(String locator, String value) { throw new UnsupportedOperationException(); }
1794-
17951784
}

java/client/src/com/thoughtworks/selenium/webdriven/WebDriverCommandProcessor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,6 @@ private void setUpMethodMap() {
319319
seleneseMethods.put("selectFrame", new SelectFrame(windows));
320320
seleneseMethods.put("selectPopUp", new SelectPopUp(windows));
321321
seleneseMethods.put("selectWindow", new SelectWindow(windows));
322-
seleneseMethods.put("sendKeys", new SendKeys(alertOverride, elementFinder));
323322
seleneseMethods.put("setBrowserLogLevel", new NoOp(null));
324323
seleneseMethods.put("setContext", new NoOp(null));
325324
seleneseMethods.put(

java/client/src/com/thoughtworks/selenium/webdriven/commands/SendKeys.java

Lines changed: 0 additions & 122 deletions
This file was deleted.

java/server/src/org/openqa/selenium/server/htmlrunner/NonReflectiveSteps.java

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.thoughtworks.selenium.webdriven.JavascriptLibrary;
3030
import com.thoughtworks.selenium.webdriven.commands.SeleniumSelect;
3131

32+
import org.openqa.selenium.Keys;
3233
import org.openqa.selenium.WebElement;
3334
import org.openqa.selenium.internal.WrapsDriver;
3435

@@ -52,6 +53,8 @@ private static ImmutableMap<String, CoreStepFactory> build() {
5253
steps.put("assertErrorOnNext", nextCommandFails);
5354
steps.put("assertFailureOnNext", nextCommandFails);
5455

56+
steps.put("sendKeys", SendKeys::new);
57+
5558
steps.put(
5659
"verifyErrorOnNext",
5760
(locator, value) -> (selenium, state) -> new VerifyNextCommandFails(state.expand(locator)));
@@ -196,4 +199,103 @@ public boolean isOkayToContinueTest() {
196199
return true;
197200
}
198201
}
202+
203+
private static class SendKeys implements CoreStep {
204+
205+
private final String locator;
206+
private final String value;
207+
208+
private SendKeys(String locator, String value) {
209+
this.locator = locator;
210+
this.value = value;
211+
}
212+
213+
@Override
214+
public NextStepDecorator execute(Selenium selenium, TestState state) {
215+
String value = state.expand(this.value);
216+
217+
value = value.replace("${KEY_ALT}", Keys.ALT);
218+
value = value.replace("${KEY_CONTROL}", Keys.CONTROL);
219+
value = value.replace("${KEY_CTRL}", Keys.CONTROL);
220+
value = value.replace("${KEY_META}", Keys.META);
221+
value = value.replace("${KEY_COMMAND}", Keys.COMMAND);
222+
value = value.replace("${KEY_SHIFT}", Keys.SHIFT);
223+
224+
value = value.replace("${KEY_BACKSPACE}", Keys.BACK_SPACE);
225+
value = value.replace("${KEY_BKSP}", Keys.BACK_SPACE);
226+
value = value.replace("${KEY_DELETE}", Keys.DELETE);
227+
value = value.replace("${KEY_DEL}", Keys.DELETE);
228+
value = value.replace("${KEY_ENTER}", Keys.ENTER);
229+
value = value.replace("${KEY_EQUALS}", Keys.EQUALS);
230+
value = value.replace("${KEY_ESCAPE}", Keys.ESCAPE);
231+
value = value.replace("${KEY_ESC}", Keys.ESCAPE);
232+
value = value.replace("${KEY_INSERT}", Keys.INSERT);
233+
value = value.replace("${KEY_INS}", Keys.INSERT);
234+
value = value.replace("${KEY_PAUSE}", Keys.PAUSE);
235+
value = value.replace("${KEY_SEMICOLON}", Keys.SEMICOLON);
236+
value = value.replace("${KEY_SPACE}", Keys.SPACE);
237+
value = value.replace("${KEY_TAB}", Keys.TAB);
238+
239+
value = value.replace("${KEY_LEFT}", Keys.LEFT);
240+
value = value.replace("${KEY_UP}", Keys.UP);
241+
value = value.replace("${KEY_RIGHT}", Keys.RIGHT);
242+
value = value.replace("${KEY_DOWN}", Keys.DOWN);
243+
value = value.replace("${KEY_PAGE_UP}", Keys.PAGE_UP);
244+
value = value.replace("${KEY_PGUP}", Keys.PAGE_UP);
245+
value = value.replace("${KEY_PAGE_DOWN}", Keys.PAGE_DOWN);
246+
value = value.replace("${KEY_PGDN}", Keys.PAGE_DOWN);
247+
value = value.replace("${KEY_END}", Keys.END);
248+
value = value.replace("${KEY_HOME}", Keys.HOME);
249+
250+
value = value.replace("${KEY_NUMPAD0}", Keys.NUMPAD0);
251+
value = value.replace("${KEY_N0}", Keys.NUMPAD0);
252+
value = value.replace("${KEY_NUMPAD1}", Keys.NUMPAD1);
253+
value = value.replace("${KEY_N1}", Keys.NUMPAD1);
254+
value = value.replace("${KEY_NUMPAD2}", Keys.NUMPAD2);
255+
value = value.replace("${KEY_N2}", Keys.NUMPAD2);
256+
value = value.replace("${KEY_NUMPAD3}", Keys.NUMPAD3);
257+
value = value.replace("${KEY_N3}", Keys.NUMPAD3);
258+
value = value.replace("${KEY_NUMPAD4}", Keys.NUMPAD4);
259+
value = value.replace("${KEY_N4}", Keys.NUMPAD4);
260+
value = value.replace("${KEY_NUMPAD5}", Keys.NUMPAD5);
261+
value = value.replace("${KEY_N5}", Keys.NUMPAD5);
262+
value = value.replace("${KEY_NUMPAD6}", Keys.NUMPAD6);
263+
value = value.replace("${KEY_N6}", Keys.NUMPAD6);
264+
value = value.replace("${KEY_NUMPAD7}", Keys.NUMPAD7);
265+
value = value.replace("${KEY_N7}", Keys.NUMPAD7);
266+
value = value.replace("${KEY_NUMPAD8}", Keys.NUMPAD8);
267+
value = value.replace("${KEY_N8}", Keys.NUMPAD8);
268+
value = value.replace("${KEY_NUMPAD9}", Keys.NUMPAD9);
269+
value = value.replace("${KEY_N9}", Keys.NUMPAD9);
270+
value = value.replace("${KEY_ADD}", Keys.ADD);
271+
value = value.replace("${KEY_NUM_PLUS}", Keys.ADD);
272+
value = value.replace("${KEY_DECIMAL}", Keys.DECIMAL);
273+
value = value.replace("${KEY_NUM_PERIOD}", Keys.DECIMAL);
274+
value = value.replace("${KEY_DIVIDE}", Keys.DIVIDE);
275+
value = value.replace("${KEY_NUM_DIVISION}", Keys.DIVIDE);
276+
value = value.replace("${KEY_MULTIPLY}", Keys.MULTIPLY);
277+
value = value.replace("${KEY_NUM_MULTIPLY}", Keys.MULTIPLY);
278+
value = value.replace("${KEY_SEPARATOR}", Keys.SEPARATOR);
279+
value = value.replace("${KEY_SEP}", Keys.SEPARATOR);
280+
value = value.replace("${KEY_SUBTRACT}", Keys.SUBTRACT);
281+
value = value.replace("${KEY_NUM_MINUS}", Keys.SUBTRACT);
282+
283+
value = value.replace("${KEY_F1}", Keys.F1);
284+
value = value.replace("${KEY_F2}", Keys.F2);
285+
value = value.replace("${KEY_F3}", Keys.F3);
286+
value = value.replace("${KEY_F4}", Keys.F4);
287+
value = value.replace("${KEY_F5}", Keys.F5);
288+
value = value.replace("${KEY_F6}", Keys.F6);
289+
value = value.replace("${KEY_F7}", Keys.F7);
290+
value = value.replace("${KEY_F8}", Keys.F8);
291+
value = value.replace("${KEY_F9}", Keys.F9);
292+
value = value.replace("${KEY_F10}", Keys.F10);
293+
value = value.replace("${KEY_F11}", Keys.F11);
294+
value = value.replace("${KEY_F12}", Keys.F12);
295+
296+
selenium.typeKeys(locator, value);
297+
298+
return NextStepDecorator.IDENTITY;
299+
}
300+
}
199301
}

0 commit comments

Comments
 (0)