WebDriver:为什么find_element_by_xpath之后send_keys不起作用?

时间:2012-11-09 14:32:26

标签: python text selenium filter webdriver

我想用Webdriver测试文本过滤器(适用于Python,Chrome和Firefox)。在网页上是名称列表和输入字段。当用户键入文本时,将过滤名称列表,将隐藏不包含键入文本的名称。当用户按下Enter / Return时,最佳匹配名称将被复制到另一个输入字段。首先我输入文本(必须使用XPath):

textbox = browser.find_element_by_xpath(pathToInputField)
textbox.send_keys(text)

然后检查列表(略微简化):

for name in names:
    xpath = "//div[contains(text(), '{0}')]".format(name)
    elmIsDisplayed = browser.find_element_by_xpath(xpath).is_displayed()
    if (text in name):
       self.assertTrue(elmIsDisplayed)
    else:
       self.assertFalse(elmIsDisplayed)

到目前为止,它工作正常。之后我尝试按Enter / Return:

textbox.send_keys(Keys.RETURN)

但输入字段(由textbox或find_element_by_xpath访问)将不会获得任何键(既不返回也不包含任何其他字符)。当我删除

find_element_by_xpath(xpath)

用于检查名称,复制正确的名称并且所有名称都有效。因此,似乎xpath搜索另一个元素会阻止第二个send_keys()。我在这里想念一些细节还是这个错误?

1 个答案:

答案 0 :(得分:0)

只是一个想法,你可以尝试使用javascript而不是send_keys,如下所示:

js_code = """
    var eventName = "keypress";
    var keycode = 13;
    var evt = document.createEvent("KeyboardEvent");
    evt.initKeyboardEvent(eventName, true, true, window, false, false, false, false, keycode, keycode);
    this.dispatchEvent(evt);
"""
textbox.evaluateJavaScript(js_code)