【问题标题】:How to handle authentication popup in chrome in selenium如何在 selenium 中处理 chrome 中的身份验证弹出窗口
【发布时间】:2019-11-26 17:39:57
【问题描述】:

我正在尝试访问启用了 https 和 SSO 的站点。 我已经在 URL 本身中传递了用户 ID 和密码,但这不适用于 chrome 浏览器。

我观察到 url 中有一种令牌被添加到 url 之间。每次访问该 url 时,此令牌都是新的。

我认为在这里可以工作的是 .. 访问 url -> 这将在 url 中添加一个新令牌 -> 身份验证弹出窗口将出现 -> 然后我将获取当前 url(使用当前令牌)-> driver.get这个获取的 url

我已经手动尝试过了,它工作正常..

当身份验证弹出窗口仍然打开时,有人可以帮我获取当前的 url 值,因为对我来说,控件没有移动到下面代码的下一行。

    public static void main(String[] args) throws InterruptedException, AWTException {

    WebDriver driver = new ChromeDriver();

    driver.manage().window().maximize();

    driver.get("url_without_token");

    // here authentication will come and url is updated with token

    String currentURL = driver.getCurrentUrl();
    System.out.println(currentURL);
    driver.get(currentURL);
} 

【问题讨论】:

标签: java selenium authentication


【解决方案1】:

你可以这样做:

        wait.until((ExpectedCondition<Boolean>) driver ->
                webDriver.getCurrentUrl().contains("token")
        );

其中“token”是来自 url 的令牌参数的名称。

【讨论】:

  • 如果用户不知道令牌的期望值是多少,这可能不起作用。但是,如果 URL 参数类似于“?token={someValue}”,那么它将起作用。只是取决于token参数是如何命名的。
  • 这将不起作用,因为令牌不固定并且每次都在不断变化
  • 您可以存储旧令牌并验证它是否已更改
【解决方案2】:

使用睡眠或隐式等待等等待:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

检查这个答案:Getting the URL of the current page using Selenium WebDriver

【讨论】:

  • 这个问题的问题是关于身份验证。隐式等待与此有什么关系?
猜你喜欢
  • 2016-05-11
  • 2017-06-26
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多