Selenium未向我的gwt-SuggestBox发送键入内容

2 投票
2 回答
778 浏览
提问于 2025-04-17 06:46

我正在使用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里输入数据呢?

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直接修改元素的值属性。Selenium这个工具在它的接口中并没有直接支持这个功能,因为他们认为用户不会直接去修改一个值。不过,有时候对于一些“难搞”的对象,这种方法是必要的,可以作为一种解决办法。

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)

根据绑定到建议输入的按键,这个方法可能会有效。

撰写回答