【问题标题】:Selenium Webdriver wait for url?Selenium Webdriver 等待 url?
【发布时间】:2014-04-16 09:32:21
【问题描述】:

我有一个 Selenium Webdriver 脚本,用 python 编写,可以打开一个 url;

def GotToURL(self):

  #Go to url
  driver.get("http://someurl.com")

  #Prints url once it is finished loading
  print driver.current_url

问题是每 15 个网址中就有 1 个无法完成加载。所以,我只想添加一个尝试运行该步骤的步骤

 print driver.current_url

等待 10 秒,如果不起作用,请重新启动脚本。

有人有什么想法吗?

在 osx 上运行 Selenium Webdriver 和 python 2.7

【问题讨论】:

  • 这并不像您指出的那么简单。 URL 更改的事实并不表示 页面 已完成加载。
  • 感谢@Arran 的回复。我也曾害怕过。我面临的问题是脚本的其余部分在页面最终加载之前不会继续。如果我单击浏览器上的顶部按钮,脚本会继续正常运行,但必须这样做会破坏测试自动化的目的。
  • 您的页面可能有一些由 AJAX 调用添加的内容,需要一些额外的时间才能完成。您需要根据需要设置一些明确的wait
  • @jJavier 感谢您的回复。我不确定是不是因为这个加载事件是随机发生的并且它永远不会完成加载(我已经把它放在了一夜之前)。我尝试过使用等待(使用 element_is_clickable),但它似乎不起作用。

标签: python python-2.7 selenium-webdriver


【解决方案1】:

我能想到的最佳选择是使用Explicit and Implicit Waits

例如,您可以像这样定义驱动程序

driver = webdriver.Ie() #note that I'm using IE
driver.set_page_load_timeout(10) #set the max to 10s

然后将您的操作放入 try except 语句中,并指定 TimeoutException。这样做你是说如果页面加载时间超过 10 秒,驱动程序必须抛出异常,然后你可以定义如何处理这种情况。

【讨论】:

  • 感谢您的回复。不幸的是,我遇到了您解决方案的第一个障碍,因为我似乎无法让异常正常工作。 from selenium.common.exceptions import TimeoutException DRIVER.set_page_load_timeout(5) DRIVER.get(http://url.com) try: print DRIVER.current_url except TimeoutException: print 'Page failed to load 当加载超时时,“页面加载失败”没有被打印出来。相反,selenium.common.exceptions.TimeoutException: Message: u'Timed out waiting for page load. 有什么想法吗?我做错什么了吗?
  • @user1799835 不客气。是在获取期间抛出异常,因此您必须将该行插入到 try 范围内才能获得所需的内容。
猜你喜欢
  • 2014-04-04
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
相关资源
最近更新 更多