Selenium не отправляет ключи на мой gwt-SuggestBox - PullRequest
2 голосов
/ 21 ноября 2011

Я использую селен, скрипты на python, чтобы протестировать веб-страницу с gwt-SuggestBox:

<div id="streamSuggestBox">
  <table> <tbody><tr> <td> <div class="gwt-Label errorText">Stream:</div> </td> 
  <td> <div><input type="text" class="gwt-SuggestBox"></div> </td> 
  </tr> </tbody></table>
</div>

Селен может найти div и виджет ввода:

(Pdb) sugInput = self.driver.find_element_by_id("streamSuggestBox").find_element_by_tag_name("input")
(Pdb) p sugInput.tag_name
u'input'

и если во входном виджете есть текст, sugInput.clear() очищает его.

Проблема в том, что sugInput.send_keys("s") не работает - в поле ввода ничего не отображается и предложения не выводятся.Как мне ввести данные в мой gwt-SuggestBox?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2011

Вам, вероятно, нужно вызвать нажатие клавиши, чтобы заставить ввод работать. Вот как сделать приведенный выше пример из C # в python:

el = self.driver.find_element_by_xpath("//div[@id='streamSuggestBox']/input[@class='gwt-SuggestBox']")
script = "arguments[0].setAttribute('value', argument[1])"
self.driver.execute_script(script,el,[value])

Чтобы вызвать предложение, вы, вероятно, могли бы сделать это:

el = self.driver.find_element_by_xpath("//div[@id='streamSuggestBox']/input[@class='gwt-SuggestBox']")
el.send_keys("s")
el.send_keys(Keys.TAB)

в зависимости от того, какое нажатие клавиши привязано к предложенному вводу, это, вероятно, будет работать

0 голосов
/ 22 ноября 2011

Вы можете попытаться напрямую установить атрибут value.Извините, приведенный ниже код написан на C #, но концепция в Python должна быть такой же:

string script = "arguments[0].setAttribute('value', argument[1])";
IWebElement suggestionBox = //find it somehow...
driver.ExecuteScript(script, suggestionBox , "I typed this!");

. Нужно использовать javascript для прямого изменения атрибута значения элемента .Selenium не предоставляет прямой поддержки для этого в своем API, потому что они не верят, что пользователь когда-либо будет напрямую изменять значение.Однако для «сложных» объектов иногда это необходимо в качестве обходного пути.

...