WebDriver. Не нажимается enter
Недавно в процессе рефакторинга авто-тестов столкнулся со странной проблемой: следующий кусок кода никак не хотел делать, то что нужно:
- WebElement element = webDriver.findElement(By.xpath(search.text_search));
- element.clear();
- element.sendKeys("example");
- element.sendKeys(Keys.ENTER);
Как становится понятно из кода, вебдрайвер просто должен найти поле поиска, написать, что мы ищем, и нажать Enter. Enter никак не хотел нажиматься, но никаких ошибок не выкидывало. Enter просто не нажимался. И вот два варианта решения проблемы:
1) Просто добавить «\n». Маркер NewLine был воспринят формой как Enter — просто и сердито.
- WebElement element = webDriver.findElement(By.xpath(search.text_search));
- element.clear();
- element.sendKeys("example\n");
2) Более коварный — осуществить нажатие с помощью JavaScript. Конечно, данный метод по сравнению с предыдущим нарушает принцип KISS, но вдруг первый метод не помогает по какой-либо причине.
- WebElement element = webDriver.findElement(By.xpath(search.text_search));
- element.clear();
- element.sendKeys("example");
- String script ="var object = arguments[0];"
- + "var theEvent = document.createEvent(\"KeyboardEvent\");"
- + "theEvent.initKeyEvent(\"keypress\",true,true,null,false,false,false,false,0,2424);"
- + "object.dispatchEvent(theEvent);";
- ((JavascriptExecutor)webDriver).executeScript(script, element);
Для тех, кому не совсем понятно, что происходит:
Переменная script содержит код, выполняющий нажатие клавиши. Более подробно про него можно прочитать тут ( там же можно посмотреть про другие события, это может понадобиться при работе со скрытыми элементами). 8-ая строчка кода выполняет ваш script. Как вы уже догадались arguments[0] — это ваш элемент, который element.