发布
社区首页 >问答首页 >Chrome/Java/Selenium4 4:使用RemoteWebDriver的身份验证弹出

Chrome/Java/Selenium4 4:使用RemoteWebDriver的身份验证弹出
EN

Stack Overflow用户
提问于 2021-03-02 14:31:58
回答 1查看 487关注 0票数 1

我想在测试环境上进行一些Java/Selenium4 4测试自动化,该环境由一个身份验证弹出保护。这不是警报,而是Chrome弹出窗口:屏幕截图

在我们的框架中,我们有两个选择:

  1. 你在你的本地机器上运行测试。我们使用org.openqa.selenium.chrome.ChromeDriver类来驱动Chrome。
  2. 测试在我们的CI/docker机器上运行(使用maven和selenium/chrome容器)。然后,我们使用org.openqa.selenium.remote.RemoteWebDriver类从maven容器中驱动Chrome (在selenium容器中)。

这个设置一直运行良好。然而,这个弹出式窗口证明是一个相当大的挑战。我为选项1找到了一个解决方案:

((HasAuthentication)driver).register(UsernameAndPassword.of("username","password"));

这不适用于选项2,因为显然RemoteWebDriver类没有实现HasAuthentication接口:

java.lang.ClassCastException: class org.openqa.selenium.remote.RemoteWebDriver cannot be cast to class org.openqa.selenium.HasAuthentication (org.openqa.selenium.remote.RemoteWebDriver and org.openqa.selenium.HasAuthentication are in unnamed module of loader 'app')

这意味着这个解决方案不会在我们的CI设置上运行,现在我被卡住了。我看到人们使用自定义Chrome扩展作为解决办法,但我希望有一个更容易/更好的解决方案.

如何使用RemoteWebDriver Chrome驱动程序类与浏览器弹出、Selenium4 4/Java进行交互?

EN

回答 1

Stack Overflow用户

发布于 2022-07-19 17:54:09

代码语言:javascript
代码运行次数:0
复制
public class ChromeDevToolsAugmenterAuthentication {


public static void main(String[] args) throws MalformedURLException,InterruptedException {
ChromeOptions chromeOptions = new ChromeOptions();
WebDriver driver = RemoteWebDriver.builder()
  .oneOf(chromeOptions)
  .address("http://localhost:4444")
  .build(); 
DevTools devTools = ((HasDevTools) driver).getDevTools();
devTools.createSession();

Augmenter augmenter = new Augmenter();

driver = augmenter
  .addDriverAugmentation("chrome",
                         HasAuthentication.class,
                         (caps, exec) -> (whenThisMatches, useTheseCredentials) ->
                           devTools.getDomains()
                             .network()
                             .addAuthHandler(whenThisMatches, useTheseCredentials))
  .augment(driver);

((HasAuthentication) driver).register(UsernameAndPassword.of("admin", "admin"));
driver.get("https://the-internet.herokuapp.com/basic_auth");
System.out.println(driver.findElement(By.tagName("p")).getText());
driver.quit();

}}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66441362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档