Python 3.5-Selenium-如何处理新窗口并等待其完全加载?

我正在执行浏览器自动化,并且在某个时候被阻止:稍后,我要求浏览器单击一个按钮,该按钮又打开一个新窗口。但是有时Internet太慢,因此加载新窗口需要时间。我想知道如何让Selenium等待,直到这个新窗口完全加载完毕。

这是我的代码:

driver.switch_to.default_content()

Button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'addPicturesBtn')))

Button.click()

newWindow = driver.window_handles

time.sleep(5)

newNewWindow = newWindow[1]

driver.switch_to.window(newNewWindow)

newButtonToLoad = driver.find_element_by_id('d')

newButtonToLoad.send_keys('pic.jpg')

uploadButton = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'uploadPics')))

uploadButton.click()

driver.switch_to.window(newWindow[0])

我不时收到此错误:

newNewWindow = newWindow [1]

IndexError:列表索引超出范围

这让我认为简单的“ time.sleep(5)”无法完成工作。

谢谢

回答:

您可以尝试使用以下代码等待直到出现新窗口:

WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))

您的代码应如下所示

Button.click()

WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))

newWindow = driver.window_handles

newNewWindow = newWindow[1]

driver.switch_to.window(newNewWindow)

考虑到@JimEvans评论,请尝试以下操作:

current = driver.window_handles[0]

Button.click()

WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))

newWindow = [window for window in driver.window_handles if window != current][0]

driver.switch_to.window(newWindow)

以上是 Python 3.5-Selenium-如何处理新窗口并等待其完全加载? 的全部内容, 来源链接: utcz.com/qa/408762.html

回到顶部