2

我正在使用 selenium(在 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>

selenium 可以找到 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 回答