【问题标题】:How do I send a DELETE keystroke to a text field using Selenium with Python?如何使用 Selenium 和 Python 将 DELETE 击键发送到文本字段?
【发布时间】:2015-02-04 23:19:52
【问题描述】:

如何使用 Selenium Web 测试器将 Keys.DELETE 击键发送到文本字段?我正在尝试模拟用户在字段中输入,然后删除他们输入的内容以测试交互式自动建议功能。它应该将列表过滤为以查询开头的项目,然后在删除查询时再次显示所有可能的建议。不幸的是,发送 .clear() 无法再次取消过滤列表。 send_keys('\127') 也不行。

def get_suggestions():
    driver.get('https://www.example.com/')
    driver.find_element_by_css_selector('#searchQuery').click()
    driver.find_element_by_css_selector('#searchQuery').send_keys('a')
    sleep(0.5)
    driver.find_element_by_css_selector('#searchQuery').send_keys(Keys.DELETE)
    sleep(0.5)
    for suggestion in driver.find_elements_by_css_selector('#search-form #suggestions'):
        yield suggestion

如何模拟用户按下键盘上的删除按钮?

【问题讨论】:

  • from selenium.webdriver.common.keys import Keys 仅供任何想知道如何导入它的人使用。
  • @jmunsch 添加为答案。我错过了这条评论。

标签: python selenium selenium-webdriver


【解决方案1】:

如何删除一行文字

这个快捷方式对我不起作用Ctrl + a
但是SHIFT + END 工作得很好

如果光标在行尾,使用SHIFT + HOME

action = ActionChains(driver)
action.key_down(Keys.SHIFT).send_keys(Keys.HOME, Keys.BACKSPACE).perform()

如果光标在行首使用SHIFT + END

action = ActionChains(driver)
action.key_down(Keys.SHIFT).send_keys(Keys.END, Keys.BACKSPACE).perform() 

【讨论】:

    【解决方案2】:

    您可以使用Ctr+a 突出显示文本并通过BACKSPACE 将其删除:

    from selenium.webdriver.common.keys import Keys
    
    element.send_keys(Keys.CONTROL, 'a')
    element.send_keys(Keys.BACKSPACE)
    

    【讨论】:

      【解决方案3】:

      如果你想删除光标前的一个字符,你需要使用Keys.BACKSPACE 而不是Keys.DELETEKeys.DELETE 用于删除光标后的一个字符。

      确保您使用的是以下导入:

      from selenium.webdriver.common.keys import Keys
      

      【讨论】:

      • 是的,具有讽刺意味的是,当我键入 Keys 时,通过在 iPython 的自动建议列表中看到 Keys.BACKSPACE 后,我刚刚找到了答案。现在感觉有点傻。
      • @NickSweeting,也许您使用的是 Mac? Mac 中的键盘布局让人困惑 ;)
      【解决方案4】:

      另外,如果你想删除整个文本,你可以在一个函数中模仿 ctrl + abackspace,如下所示:

      def clear_entire_text(element):
          element.send_keys(Keys.CONTROL + 'a', Keys.BACKSPACE)
      

      【讨论】:

        【解决方案5】:

        为什么没有人说需要导入?

        from selenium.webdriver.common.keys import Keys
        

        【讨论】:

          【解决方案6】:

          我正在尝试模拟用户在字段中输入然后删除 他们输入了什么

          如果您尝试一次删除一个键,那么正如@falsetru 所述,使用以下命令将一次删除一个字符:

          element = driver.find_element_by_css_selector('#searchQuery')
          element.send_keys(Keys.BACKSPACE)
          

          但是,如果要删除整个搜索查询,我宁愿清除输入字段。

          element = driver.find_element_by_css_selector('#searchQuery')
          element.click()
          element.clear()
          

          【讨论】:

            【解决方案7】:

            在 python 中,如果 element.clear()(在反应中不触发 onChange)不起作用,试试这个。

            def clear_text(element):
                        length = len(element.get_attribute('value'))
                        element.send_keys(length * Keys.BACKSPACE)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-07-15
              • 2020-06-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-11
              相关资源
              最近更新 更多