Недавно в процессе рефакторинга авто-тестов столкнулся со странной проблемой: следующий кусок кода никак не хотел делать, то что нужно:

  1. WebElement element = webDriver.findElement(By.xpath(search.text_search));
  2. element.clear();
  3. element.sendKeys("example");
  4. element.sendKeys(Keys.ENTER);

Как становится понятно из кода, вебдрайвер просто должен найти поле поиска, написать, что мы ищем, и нажать Enter. Enter никак не хотел нажиматься, но никаких ошибок не выкидывало. Enter просто не нажимался. И вот два варианта решения проблемы:

 

1) Просто добавить «\n». Маркер NewLine был воспринят формой как Enter — просто и сердито.

  1. WebElement element = webDriver.findElement(By.xpath(search.text_search));
  2. element.clear();
  3. element.sendKeys("example\n");

 

2) Более коварный — осуществить нажатие с помощью JavaScript. Конечно, данный метод по сравнению с предыдущим нарушает принцип KISS, но вдруг первый метод не помогает по какой-либо причине.

  1. WebElement element = webDriver.findElement(By.xpath(search.text_search));
  2. element.clear();
  3. element.sendKeys("example");
  4. String script ="var object = arguments[0];"
  5. + "var theEvent = document.createEvent(\"KeyboardEvent\");"
  6. + "theEvent.initKeyEvent(\"keypress\",true,true,null,false,false,false,false,0,2424);"
  7. + "object.dispatchEvent(theEvent);";
  8. ((JavascriptExecutor)webDriver).executeScript(script, element);

Для тех, кому не совсем понятно, что происходит:

Переменная script содержит код, выполняющий нажатие клавиши. Более подробно про него можно прочитать тут ( там же можно посмотреть про другие события, это может понадобиться при работе со скрытыми элементами). 8-ая строчка кода выполняет ваш script. Как вы уже догадались arguments[0] — это ваш элемент, который element.

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс