Selenium Webdriver 等待 URL?

4
我有一份使用Python编写的Selenium Webdriver脚本,可以打开一个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个url无法完成加载。所以,我想要添加一个步骤来尝试运行该步骤。
 print driver.current_url

如果持续10秒钟无效,请重新启动脚本。

有人有什么想法吗?

在OSX上运行Selenium Webdriver和Python 2.7。


这并不像你所说的那样简单。URL的变化并不意味着页面已经加载完成。 - Arran
感谢您的回复,@Arran。我也有同样的担忧。我面临的问题是,在页面最终加载完成之前,脚本的其余部分无法继续执行。如果我在浏览器上单击顶部按钮,脚本就会像平常一样继续执行,但这样做有点违背了测试自动化的初衷。 - user1799835
你的页面可能有一些通过 AJAX 调用添加的内容,需要额外的时间来完成。根据你的需求,你需要设置一些明确的等待,可以参考 waits - Javier
@jJavier,感谢您的回复。我不确定是这个问题,因为这个加载事件是随机发生的,并且它从来没有完成加载(我之前留过一整晚)。我尝试使用等待(使用element_is_clickable),但似乎没有起作用。 - user1799835
1个回答

2

我能想到的最好的选择是使用 显式和隐式等待

例如,您可以这样定义驱动器

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 TimeoutExceptionDRIVER.set_page_load_timeout(5)DRIVER.get(http://url.com)try: print DRIVER.current_url except TimeoutException: print 'Page failed to load`当加载超时时,“Page failed to load”未被打印出来。相反,selenium.common.exceptions.TimeoutException: Message: u'Timed out waiting for page load.有什么想法吗?我做错了什么明显的事情吗? - user1799835
@user1799835 不用谢。异常是在获取期间抛出的,因此您必须将该行插入try范围内,以便获得所需内容。 - 5agado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接