我已经搜索过这个问题了,我所看到的一切似乎都没有用。我目前正在尝试在Chrome中的身份验证框中输入用户名和密码,我找不到在Selenium中执行此操作的好方法。问题来自这样的事实:在Selenium中的webelement上运行“click”方法会有效地停止所有执行,直到处理完认证框。我尝试了三种方法:
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
然后运行alert.authenticateUsing(new UserAndPassword("-ssqatest", "Sqa7-3$t"));
这个问题是alertIsPresent实际上并不适用于Chrome。我可以通过在它之后放置一个print语句来确认这一点,并且它永远不会运行,因为它会抛出错误“无法确定加载状态”。然而,它适用于Firefox,这使我第二次尝试:
以与上述相同的方式进行操作,但在Firefox中 这不起作用,因为正确检测到警报时,在authenticateUsing之后的行会抛出selenium.Unsupportedcommandexception。
检测到警报后,直接在Firefox浏览器中输入“https://username:password@url.com” 这不起作用,因为我不能使用Selenium来获取页面的URL,因为webdriver在原始线程上实例化,在认证弹出窗口期间停止了。我不想仅仅为了获取页面的URL而重新实例化新会话。
此时,我能想到的唯一另一种方法是使用java的Robot类,但我也不愿意这样做,因为它需要手动让机器人有一个按键和键释放来变得非常麻烦每个角色。
最好的方法是什么?
由于
答案 0 :(得分:0)
您不需要重新实例化该线程。除非我遗漏了一些东西,你可以使用#3并只使用switchTo()
来改变窗口。像这样:
Set<String> windowHandles = driver.getWindowHandles();
for(String handle : windowHandles) {
driver.switchTo().window(handle);
if(driver.getTitle().equals(NEW_WINDOW_TITLE)) {
return;
}
}