Selenium + Python - 在没有 URL 用户名和密码参数的情况下处理身份验证对话框

Selenium + Python - Handling Authentication Dialog without URL username and password params

我需要在不提供 URL 中的参数的情况下对自己进行身份验证。这意味着,我必须手动处理警报(这意味着,切换到警报,验证,切换回之前的 window)并使用 Selenium Alert Class.[=17 提供的验证方法=]

这是我用来处理警报的函数:

def login_browser_alert(driver):
    WebDriverWait(driver, 3).until(EC.alert_is_present())
    current_window = driver.window_handles[0]
    driver.switch_to.alert.authenticate('admin', 'admin')
    driver.switch_to.window(current_window)

这是我导航到页面的方式:

def goto_page(self):
        self.driver.get(self.URL)
        login_browser_alert(self.driver)

我使用 http://the-internet.herokuapp.com/basic_auth 作为虚拟身份验证示例。凭据是用户:"admin" 通行证:"admin"

问题:

没有任何反应。 对话框将保留在那里,任何字段都不会发送任何输入。什么都不会被点击。它只是,挂在那里。

我找到的所有解决方案都只是在 URL 中传递参数,如下所示:

http://admin:admin@the-internet.herokuapp.com/basic_auth

由于我目前正在进行的项目的某些特定原因,我不能这样做。 所以,不,这赢了'解决我的问题...

有人遇到过类似的问题吗?您是如何解决这个问题的?

编辑:

在此 link 中,您可以找到有关此问题的更多信息。

https://github.com/SeleniumHQ/selenium/issues/5471#issuecomment-364457555

警报 class 中的验证方法只是实验性的。似乎唯一的方法确实是使用 URL 参数。

Alert#authenticate() 可能什么都不做。它已从 Ruby 和 Java 绑定中删除,并且在 Python 绑定中没有针对它的测试。

正如您在其他地方看到的那样,您唯一的选择是在请求的 URL 中包含用户名和密码,如 username:password@host