Python3 Selenium:在新窗口中等待页面加载

时间:2016-04-14 03:30:45

标签: python python-3.x selenium selenium-webdriver wait

我看了一遍,发现了一些非常好的解决方案,等待页面加载和窗口加载(是的,我知道有很多关于它们的Stack问题是孤立的)。但是,似乎没有一种方法可以有效地结合这两种等待。

this post结尾我的主要灵感,我想出了这两个功能,用于"用"语句:

rand

这些工作非常独立。但是,由于每个人检查自己的内部条件的方式,它们无法组合。例如,此代码将无法等到第二页已加载,因为切换窗口的行为导致" oldPage"变得陈旧:

#This is within a class where the browser is at self.driver

@contextmanager
def waitForLoad(self, timeout=60):
    oldPage = self.driver.find_element_by_tag_name('html')
    yield
    WebDriverWait(self.driver, timeout).until(staleness_of(oldPage))

@contextmanager
def waitForWindow(self, timeout=60):
    oldHandles = self.driver.window_handles
    yield
    WebDriverWait(self.driver, timeout).until(
        lambda driver: len(oldHandles) != len(self.driver.window_handles)
    )

#example
button = self.driver.find_element_by_xpath(xpath)
if button:
    with self.waitForPage():
        button.click()

是否有一些Selenium方法可以让它们一起工作?

0 个答案:

没有答案