Webdriver 点击时出现 WebDriverException/TimeoutException

1 投票
2 回答
922 浏览
提问于 2025-04-18 07:14

我正在使用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),问题似乎就解决了。

撰写回答