我目前编程实例在“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')
从未写道:“用孔雀羽毛制作飞”,在输入框中。
怎么了?我使用的是最新的硒( 我想,我下载了前几天 刚查了,我有最新版本),Python和Django的版本,这将打开Firefox的开发版在我的笔记本电脑。谢谢。
编辑:我试过disabling multi-process in Firefox,但结局不会改变 - 试着写,然后按回车时,它仍然挂起。
由于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开发版,这显然不完全硒支持。所以,我只是被迫硒加载我经常Firefox和现在不挂!
奇怪的是我无法得到任何在我的Ubuntu shell中运行,但它会通过IPython中从Jupyter笔记本电脑完全相同的服务器上运行。
我不得不添加虚拟显示为代码,使其从壳作为的.py脚本运行...
如果它可以帮助任何人面对类似的问题在这里是我加入到我的脚本的代码行和发送键启动没有问题的工作。也似乎,即使我离开这个无头开关为我铬驱动它仍然是必要的。
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()