【问题标题】:Selenium send_keys hangs on PythonSelenium send_keys 挂在 Python 上
【发布时间】:2016-05-27 05:30:17
【问题描述】:

我目前正在编写“Test-Driven Development with Python”中的示例,更具体地说是第一个功能测试。但是由于一些奇怪的原因,send_keys 无法正常工作。这就是我现在正在尝试的 - 顺便说一下,我将隐式等待更改为显式等待!

    inputbox = self.browser.find_element_by_id('id_new_item')
    self.assertEqual( # This passes, it's here just for completeness
        inputbox.get_attribute('placeholder'),
        'Enter a To-Do item'
    )
    inputbox.send_keys('Buy peacock feathers')
    inputbox.send_keys(Keys.ENTER) # Everything okay up to here
    WebDriverWait(self.browser, 10).until(
        EC.text_to_be_present_in_element((By.CSS_SELECTOR, "table#id_list_table tr td"), "Buy peacock feathers")
    )
    table = self.browser.find_element_by_id('id_list_table')

    rows = table.find_elements_by_tag_name('tr')        
    self.assertIn('1: Buy peacock feathers', [row.text for row in rows])

    inputbox1 = self.browser.find_element_by_id('id_new_item') # Changed the variable only to test if it would hang too - and it does
    inputbox1.send_keys('Use peacock feathers to make a fly')
    inputbox1.send_keys(Keys.ENTER) # This hangs
    self.fail()
    WebDriverWait(self.browser, 10).until(
        EC.text_to_be_present_in_element((By.CSS_SELECTOR, "table#id_list_table tr td"), "Use peacock feathers to make a fly")
    )

它永远不会到达self.fail()。我尝试将其移至上一行,但测试失败了,这是应该的。但是inputbox1.send_keys(Keys.ENTER) 从来没有工作过,当我在测试运行时看到浏览器时,inputbox1.send_keys('Use peacock feathers to make a fly') 从来没有在输入框中写“用孔雀羽毛做一只苍蝇”。

发生了什么?我正在使用最新的 Selenium(我想,我几天前下载了它刚刚检查过,我确实有最新版本)、Python 和 Django 版本,这会在我的笔记本电脑中打开 Firefox 开发人员版。谢谢。

编辑:我尝试了disabling multi-process in Firefox,但结果没有改变 - 在尝试写入并按 Enter 时它仍然挂起。

【问题讨论】:

  • inputbox1.send_keys(Keys.RETURN) 怎么样?
  • 另外,你使用的是什么 selenium 和 firefox 版本?
  • 刚刚做了,同样的输出。 Firefox 开发者版是 46.0a2 版本,Selenium 是 2.52.0。
  • 好吧,我想可能是firefox对于这个selenium版本来说太新了。尝试将 Firefox 降级到最新的稳定版。告诉我,谢谢。
  • 您也可以尝试使用 chrome,这样我们就可以确定这是 firefox 特有的。

标签: python django selenium tdd functional-testing


【解决方案1】:

感谢 alexce 的帮助!

我在测试类中更改了以下内容:

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

def setUp(self):
    binary = FirefoxBinary('C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe')
    self.browser = webdriver.Firefox(firefox_binary=binary)

问题?我使用的是 Firefox 开发者版,显然 Selenium 完全不支持它。所以我只是强迫 Selenium 加载我的常规 Firefox,它不再挂起!

【讨论】:

    【解决方案2】:

    奇怪的是,我无法在我的 Ubuntu shell 中运行任何东西,但它可以通过 Jupyter Notebook 上的 IPython 在完全相同的服务器上运行。

    我必须在代码中添加一个虚拟显示,以使其作为 .py 脚本从 shell 运行...

    如果它对遇到类似问题的任何人有帮助,那就是我添加到脚本中的代码行,并且发送键开始工作而没有问题。 似乎即使我为我的 chrome 驱动程序打开了无头开关,它仍然是需要的。

    from pyvirtualdisplay import Display
    
    # Set screen resolution to 1366 x 768. This is needed 
    # to run in the shell. Seems fine in iPython.
    display = Display(visible=0, size=(1366, 768))
    display.start()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-09
      • 2021-08-02
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2022-10-16
      相关资源
      最近更新 更多