微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 selenium 和 Keyclock 进行验收测试:身份验证不起作用

如何解决使用 selenium 和 Keyclock 进行验收测试:身份验证不起作用

问题:

我的任务是为应用程序实施验收测试。

从简单开始,我想测试以下内容

Scenario: Authenticated employee see its own profile
   Given Employee is Authenticated
   When Employee navigate to his profile page
   Then Employee should see the page title as "EmployeeProfile"

我一直在尝试使用 selenium wed-driver 导航到应用程序中的员工个人资料 URL,因为它无法识别身份验证。

测试将使用 Cucumber 和 Selenium 实施。 Cucumber 中的步骤使用 selenium-cucumber 在 Ruby 中实现。 我的应用程序使用 Keyclock 进行身份和访问管理。

我在做什么:

这是我实例化网络驱动程序的方式

ENV['HTTP_PROXY'] = ENV['http_proxy'] = '127.0.0.1:8080'
proxy = Selenium::WebDriver::Proxy.new(http: '127.0.0.1:8080')
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(proxy: proxy)
capabilities['acceptSslCerts'] = true
capabilities['ignore-certificate-errors'] = true
$driver = Selenium::WebDriver.for(:chrome,desired_capabilities: capabilities)

为了导航到特定的应用程序 URL,我首先尝试通过调用用户进行身份验证:

def authenticate()
  connection = Faraday.new
  response = connection.post do |request|
      request.url 'http://localhost:8443/auth/realms/REALM/protocol/openid-connect/token'
      request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
      request.headers['Connection'] = 'keep-alive'
      request.body = "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=password&username=USER_NAME&password=PASSWORD"
  end
 end

对上述 POST 的响应成功并返回一个访问令牌,我用它来重写发送的请求标头,例如导航到配置文件 URL。 我正在使用 RITM 代理重写请求,它拦截请求并添加标头如下:

  def intercept_request()
    interceptor.on_request = proc do |req|
      req.header['Authorization'] = 'Bearer ' + $access_token
      req.header['Connection'] = 'keep-alive'
    end
  end

RITM.start 在创建网络驱动程序实例时被调用

身份验证请求成功,我可以打印响应并查看访问令牌。 但是,当我使用 $driver.get URL 导航到员工个人资料 URL 时,身份验证表单再次显示,而不是导航到所需的 URL。

我目前测试的内容

我把问题分成几部分:

  • 使用代理拦截请求的工作正常,我在控制台中打印测试中发生的请求和响应。
  • 我可以使用 HTTP 客户端 API 以编程方式访问端点并获取员工资料。首先我使用邮递员作为起点,后来我用 HTTP 客户端 API 自动化了它。在此测试中,代理也能正常工作。

不起作用的是在身份验证后使用 Web 驱动程序导航到我的应用程序 URL,这似乎没有获得其下一个请求的授权。有人建议我可以尝试什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?