有谁知道在自动化过程中使用 Selenium 或任何其他工具处理浏览器身份验证?
7 回答
2015年编辑:
这个答案已经过时了。WebDriver 现在支持身份验证!请参阅如何使用 Java 使用 Selenium WebDriver 处理身份验证弹出窗口
原答案:
Selenium 不能很好地处理这个问题。
您可以尝试使用http://username:password@example.com/yourpage
而不仅仅是http://example.com/yourpage
但是,据我所知,Firefox 仍然会弹出一个浏览器对话框请求确认。
如果您使用 Java(或任何类似的工具,如AutoIt),您可以尝试使用Robot 。
driver.manage().addCookie()
如果您使用的是 WebDriver,则可以使用。
或者已经通过一次认证的自定义FirefoxProfile 。
我花了几天的时间 - 从字面上看。试图在我的公司网络中通过浏览器级别的身份验证来访问应用程序。解决方案是在 URL 中使用 'unsername:password@' 组件,但在登录 URL 的末尾添加正斜杠。
所以总的登录 URL 看起来像这样(注意yourpage之后的“/” ):
http://username:password@example.com/yourpage/
与 Watir、Capybara 和 Selenium Webdriver 一起使用。
通过 auto-it、sikuli 等进行的所有黑客攻击只是在浪费您的时间,因为您将在 CI 解决方案中运行它,使用多种浏览器类型/操作系统/版本/分辨率等。
正确执行此操作的方法是识别身份验证实际方法并使用 Rest 协议执行登录。
我用它来获取 JSESIONID cookie 并将其插入到 selenium 驱动程序中。提示:首先转到 domian 的非退出 url,然后设置 cookie,然后转到所需的 url - 您已登录。
使用:rest客户端认证获取JSESSION ID
并有了这些信息:
browser().navigate(foo.getUrl()+"non-exiting-url");
//the information got from the rest client login:
Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly);
try {
driver.manage().addCookie(cookie);
} catch (Exception e) {
System.out.println(e.toString());
}
browser().navigate(foo.getUrl());
我在网上阅读的所有内容都对我没有帮助。所以在提出请求之前,像这样:
driver.get(url);
你必须像这样运行一个新线程:
RunScript runScript = new RunScript();
runScript.start();
在这种情况下,您可以在以下课程的另一个线程上自由输入登录名和密码
public class RunScript extends Thread {
@Override
public void run() {
try {
File file = new File("D:\\jacob-1.18-x86.dll");
System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
AutoItX autoIt = new AutoItX();
Thread.sleep(2000);
autoIt.winActivate("yourWindowName", "");
autoIt.winWaitActive("yourWindowName");
if (autoIt.winExists("yourWindowName")) {
autoIt.send("username{TAB}", false);
autoIt.send("password{Enter}", false);
}
}
} catch (InterruptedException ex) {
//
}
}
}
你可以使用自动 IT 脚本来处理这个问题
WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
使用 Chrome 70 和其他版本:
http://username:password@example.com/yourpage
您可以使用 Firefox 将 Java Robot 类与 Selenium 2 /Selenium WebDriver 一起使用
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:9990");
WebElement myDynamicElement = driver.findElement(By.id("app"));
Alert alert = driver.switchTo().alert();
try {
Robot robot = new Robot();
alert.sendKeys("username");
robot.keyPress(KeyEvent.VK_TAB);//go to password feild
robot.keyPress(KeyEvent.VK_P);
robot.keyPress(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_S);
robot.keyPress(KeyEvent.VK_S);
robot.keyPress(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
}
将 Selenium 与机器人一起使用
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html