我需要在不提供URL中的参数的情况下对自己进行身份验证。这意味着,我必须手动处理警报(这意味着,切换到警报,进行身份验证,切换回上一个窗口)并使用Selenium Alert Class提供的身份验证方法。
这是我用来处理警报的功能:
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中传递params:
由于某些原因我不能解决这个问题。 所以,不,这不会解决我的问题......
有人遇到过类似的问题吗?你是怎么解决这个问题的?
修改
在此链接中,您可以找到有关此问题的更多信息。
https://github.com/SeleniumHQ/selenium/issues/5471#issuecomment-364457555
Alert类中的身份验证方法只是实验性的。似乎唯一的方法确实是URL参数。
答案 0 :(得分:1)
Alert#authenticate()
可能什么都不做。它已从Ruby和Java绑定中删除,并且在Python绑定中没有对它进行测试。
正如您在其他地方看到的那样,您唯一的选择是将请求的网址中的用户名和密码包含为username:password@host
。