send_keys поддерживает полтергейст?

Я хочу переключиться с Selenium на Poltergeist, но мне нужно смоделировать сканер штрих-кода, который выглядит как ввод с клавиатуры для тега <body>. Я использую этот код с Selenium:

native.send_keys(send_key)

Есть ли способ с помощью Полтергейста отправить строку ключей произвольному элементу (т.е. не вводу)?


person Kevin Triplett    schedule 05.03.2013    source источник
comment
Пожалуйста, выберите ответ @Matt Sanders как лучший ответ, так как он наиболее точно отвечает на ваш вопрос на сегодняшний день.   -  person Alexander    schedule 24.02.2014
comment
Годы спустя... благодаря @Matt Sanders   -  person Kevin Triplett    schedule 23.11.2017


Ответы (4)


Полтергейст теперь имеет поддержку send_keys:

element = find('input#id')

# send a simple string
element.native.send_key('String')

# send a series of keystrokes
element.native.send_keys('H', 'elo', :Left, 'l') # => 'Hello'

# symbol for special keys
element.native.send_key(:Enter) # triggers Enter key
person Matt Sanders    schedule 13.02.2014

Начиная с PhantomJS 1.7 (выпущенного 22 сентября 2012 г.), вы можете отправлять события клавиатуры в безголовый браузер, используя page.sendEvent.

Документация включает пример, имитирующий сдвиг-A:

page.sendEvent('keypress', page.event.key.A, 
               null, null, 0x02000000 | 0x08000000 );

То, как именно этот ввод обрабатывается страницей (т. е. что является целевым), будет зависеть от состояния страницы, например, от того, где находится фокус.

person Eamon Nerbonne    schedule 11.06.2013
comment
не могли бы вы опубликовать ссылку на страницу в документации, где вы это нашли? Если бы вы просто хотели нажать одну клавишу, каким был бы синтаксис? - person Max Rose-Collins; 23.09.2013
comment
github.com/ariya/phantomjs/wiki/ - но обратите внимание, что это не решает проблему само по себе, поскольку, хотя полтергейст не проходит через этот API. Вероятно, вы можете взломать его либо в самом полтергейсте, либо злоупотребив некоторыми другими открытыми внутренними компонентами, но это не решение plug-n-play. - person Eamon Nerbonne; 10.10.2013
comment
это решение кажется идеальным для тестирования github.com/jeresig/jquery.hotkeys. не могли бы вы уточнить, как передать sendEvent через rspec и полтергейст в phantomjs? - person Chris Beck; 05.04.2014
comment
как заметил Джон Лейтон: я не уверен, что это возможно без изменения полтергейста. Полтергейст пропускает некоторую информацию в используемые им JS-контейнеры, поэтому, возможно, вы можете обойти это, но самым чистым способом было бы обновить полтергейст, чтобы явно поддерживать это (или или поддерживать отправку произвольных команд в фантомы). - person Eamon Nerbonne; 07.04.2014

Нет, в настоящее время нет возможности сделать это. PhantomJS предоставляет API для этого, поэтому его можно добавить в будущем, но в настоящее время он не поддерживается.

Я бы предложил попытаться сгенерировать события клавиатуры DOM в Javascript. Или просто сохраните эти спецификации, используя Selenium, а для остальных используйте Poltergeist.

person jonleighton    schedule 05.03.2013
comment
Это неправда; phantomjs поддерживает отправку событий клавиатуры, мыши и различных других событий в браузер (а не только более ограниченный запуск, доступный из изолированной программной среды браузера): github.com/ariya/phantomjs/wiki/ - person Eamon Nerbonne; 11.06.2013
comment
Да, PhantomJS его поддерживает (как я уже говорил), но вопрос был про Полтергейст. Полтергейст не связан с этой частью PhantomJS API. - person jonleighton; 11.06.2013
comment
Действительно - извините! Возможен ли взлом (ab) на стороне клиента с использованием __poltergeist? - person Eamon Nerbonne; 12.06.2013

Начиная с версии 1.5.0 полтергейст поддерживает основные send_keys.

https://github.com/jonleighton/poltergeist/blob/master/CHANGELOG.md#150

person Valentin V    schedule 24.12.2013
comment
Я получаю эту ошибку, когда пытаюсь send_keys: NoMethodError: undefined method 'send_keys' for "1":String Мои настройки Capybara.driver=:webkit и Capybara.javascript_driver=:poltergeist с полтергейстом v1.7. Что я делаю не так? - person sameers; 02.10.2015
comment
@sameers, я думаю, вам следует отправить сообщение о проблеме на странице полтергейста на github. Версия 1.7 только что вышла, так что я еще не пробовал - person Valentin V; 02.10.2015
comment
подойдет, я предполагал, что это моя вина, но, может быть, я должен копаться в самом полтергейсте... - person sameers; 03.10.2015
comment
find('input#some').send_keys('some text') должен работать - person hisa_py; 27.11.2015