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

标签 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)

但输入字段(通过文本框或 find_element_by_xpath 访问)不会获得任何键(既不是 Return 也不是任何其他字符)。当我删除

find_element_by_xpath(xpath)

为了检查名称,复制了正确的名称并且一切正常。所以看起来 xpath 搜索另一个元素阻止了第二个 send_keys()。我是否遗漏了一些细节或者这是一个错误?

最佳答案

只是一个想法,您可以尝试使用 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)

关于python - WebDriver:为什么 send_keys 在 find_element_by_xpath 之后不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309964/

相关文章:

javascript - 相同的选择器在常规浏览器和 Selenium 中给出不同的结果

python - 如何处理 Selenium 中的 StaleElementReferenceException?

python - ".directory"在家里可以接受吗?

javascript - jQuery 跨标签突出显示元素中的文本片段

java - 如何在 Selenium 中单击带有 anchor 标记的图像或图标

java - 使用 Selenium-Java 单击 'find hotels' 时出现问题

python - 使用 tensorflow 将 3D 矩阵 reshape 为 2D 矩阵

python - BeautifulSoup-Python : How do you scrape data that has not been loaded yet?

java - 使用 BufferedReader 读取文本文件

java - 使用正则表达式从文本文件中剥离数据