【发布时间】:2017-05-17 13:51:51
【问题描述】:
我使用 Selenium WebDriver 编写了测试,但我在网站身份验证方面遇到了问题。对于 Chrome 和 Firefox,我使用了来自 URL 的基本身份验证:
WebDriver.get("https://u:p@example.com/");
它工作正常,它绕过了身份验证弹出窗口,我的测试继续到网站。
在 Explorer 和 Edge 中,我无法使用此功能,因为它已被禁用。 我尝试使用 Robot,它适用于 Explorer,但在 Edge 中,测试卡在身份验证窗口上,它不会向用户名或密码字段发送任何密钥。
WebDriver.get("https://example.com/");
Robot robot = new Robot();
Thread.sleep(2000);
robot.keyPress(KeyEvent.VK_U);
Thread.sleep(100);
robot.keyPress(KeyEvent.VK_TAB);
Thread.sleep(100);
robot.keyPress(KeyEvent.VK_P);
Thread.sleep(100);
robot.keyPress(KeyEvent.VK_TAB);
Thread.sleep(100);
robot.keyPress(KeyEvent.VK_ENTER);
现在我已经尝试了一个 http 请求:
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("https://example.com/");
httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("u", "p"), "UTF-8", false));
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity responseEntity = httpResponse.getEntity();
System.out.println(httpResponse);
WebDriver.get("https://example.com/");
我得到了这样的回应:
HTTP/1.1 200 OK 登录成功
但是当 webdriver 转到页面时,我仍然收到身份验证请求。
如何绕过身份验证窗口并在 Edge 和资源管理器中登录网站,有什么想法吗?
【问题讨论】:
-
只是对最后一部分的快速说明,初始 http 请求与 webdriver 及其所做的任何事情无关。因此,成功的 http 请求不会对 webdriver 发生的任何事情产生影响。
-
有什么方法可以将我的请求与 webdriver 绑定,以便我登录网站?
-
试试我在下面发布的答案,看看它是否适合你。我不确定是否有办法绑定这样的请求。至少没有什么是容易做到的。
标签: java selenium authentication selenium-webdriver httprequest