【问题标题】:How to send HTTP Request Code using Selenium WebDriver with Java?如何使用 Selenium WebDriver 和 Java 发送 HTTP 请求代码?
【发布时间】: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


【解决方案1】:

这在 IE 中为我处理登录弹出窗口工作。试一试。 它基本上等待登录框出现,然后尝试使用该框登录。相当简单。

WebDriverWait wait = new WebDriverWait(driver, 10);
Alert login = wait.until(ExpectedConditions.alertIsPresent());
login.authenticateUsing(new UserAndPassword("user","pass"));

【讨论】:

  • 谢谢,但这仅适用于资源管理器,我仍然需要边缘解决方案:(
猜你喜欢
  • 2018-08-07
  • 2021-08-02
  • 2011-09-24
  • 2022-11-21
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多