Webdriver 点击时出现 WebDriverException/TimeoutException
我正在使用webdriver来点击一个在iframe里的表单提交按钮。基本上是这样的:
self.driver.find_element_by_css_selector("[name~='field_1']").clear()
self.driver.find_element_by_css_selector("[name~='field_1']").send_keys("123")
self.driver.find_element_by_css_selector("[name~='field_1']").send_keys(Keys.RETURN)
self.driver.switch_to_window(self.driver.window_handles[-1])
self.assertEqual(self.driver.current_url, "http://fake_address.com")
我也试过:
self.driver.find_element_by_css_selector("[name~='field_1']").clear()
self.driver.find_element_by_css_selector("[name~='field_1']").send_keys("123")
self.driver.find_element_by_css_selector("#submit-endslide").click()
self.driver.switch_to_window(self.driver.window_handles[-1])
self.assertEqual(self.driver.current_url, "http://fake_address.com")
还有:
self.driver.find_element_by_css_selector("[name~='field_1']").clear()
self.driver.find_element_by_css_selector("[name~='field_1']").send_keys("123")
self.driver.find_element_by_css_selector("#submit-endslide").submit()
self.driver.switch_to_window(self.driver.window_handles[-1])
self.assertEqual(self.driver.current_url, "http://fake_address.com")
但是我一直遇到:
Traceback (most recent call last):
File "test_ytplayer_smoke_form.py", line 198, in testSmallFormSubmission
self.driver.find_element_by_css_selector("[name~='field_1']").send_keys(Keys.RETURN)
File "/home/giant/our_player/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 293, in send_keys
self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': typing})
File "/home/giant/our_player/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 370, in _execute
return self._parent.execute(command, params)
File "/home/giant/our_player/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 166, in execute
self.error_handler.check_response(response)
File "/home/giant/our_player/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
raise exception_class(message, screen, stacktrace)
TimeoutException: Message: u'Selenium took too long to run your command.
然后出现了
WebDriverException: 信息: u'由于之前的错误,这个任务已经结束了。
无论我选择哪种方法,点击提交按钮时总是会超时;(我已经尝试把超时时间增加到300)
注意:当我观看测试运行时,提交按钮确实被点击了,并且会打开一个新标签页,但由于出现异常,测试永远不会通过。
2 个回答
0
正如我在评论中提到的,我们需要更多的信息,不过评论编辑起来不太方便,所以我在这里补充一些内容:
- 与其根据时间等待,不如试试 WebDriverWait,具体可以参考这里。
找到元素后,可以把它存储在一个变量里,比如:
field_1 = self.driver.find_element_by_css_selector("[name~='field_1']")
field_1.clear()
field_1.send_keys("123")
submit = self.driver.find_element_by_css_selector("#submit-endslide")
submit.click()
不过,建议使用 WebElementDrive 和 ExpectedConditions,而不是直接使用驱动的方法。
1
看起来是Chrome浏览器的一个特定版本(V28)出了问题,导致了这个情况。我把浏览器更新到了最新版本(V35),问题似乎就解决了。