我看了一遍,发现了一些非常好的解决方案,等待页面加载和窗口加载(是的,我知道有很多关于它们的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方法可以让它们一起工作?