2

gwt-SuggestBox を持つ Web ページをテストするために、Python でスクリプトを作成するセレンを使用しています。

<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 にデータを入力するにはどうすればよいですか?

4

2 に答える 2

0

value属性を直接設定することができます。以下のコードは C# で申し訳ありませんが、概念は Python でも同じである必要があります。

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

要点は、javascript を使用して要素の value 属性を直接変更することです。Selenium は、ユーザーが値を直接変更することはないと考えているため、API でこれを直接サポートしていません。ただし、「難しい」オブジェクトの場合、回避策として必要になる場合があります。

于 2011-11-22T02:50:36.660 に答える
0

入力が機能し始めるには、おそらくキープレスを呼び出す必要があります。Python で C# から上記の例を実行する方法は次のとおりです。

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)

提案入力にバインドされているキープレスに応じて、これはおそらく機能します

于 2011-11-23T17:10:07.820 に答える