python-3.x - 在给定的 URL 上选择特定的用户证书
问题描述
下面是正在使用的示例代码,在访问此 url 时,会显示一个对话框,其中包含可用的用户证书列表,在这里,从表中应选择任何一个用户证书,然后单击 OK ,这需要你到着陆页。
以下已经尝试过,处理警报、获取窗口句柄甚至 iframe 即选择 ifarme,在花费了几个小时后,很明显问题如下所述。
问题
这里发生的情况是,在我做出适当的用户证书选择之前,下面代码中的 Open Browser 行没有完成,因此,在我做出选择之前,不会执行 HELLO1 或任何其他代码。
这意味着要么我需要在 URL 请求本身时传递一个参数来进行选择,要么?
机器人框架/硒是否支持任何其他方式来选择用户证书或在机器人框架中使用 javascript。
*** Settings ***
Documentation OAM OAuth TestSuite
Library SeleniumLibrary
Library String
Library Process
Library Collections
Library json
*** Variables ***
${waittime}= 10s
*** Test Cases ***
SELECT USER CERTIFICATE
[Tags] aminhell
[Documentation] sample
${ID}= Open Browser http://wren22uiy.us.iyio.com:8879/odd.html Chrome options=add_argument("--ignore-certificate-errors")
Select Frame Select a Certificate
LOG TO CONSOLE HELLO1
${message} = Get Window handles
LOG TO CONSOLE HELLO2
LOG TO CONSOLE ${message}
解决方案
在对这个主题进行了研究之后,似乎没有简单的方法可以解决这种情况:
- AutoIT 库不容易管理 Chrome
- 未选择证书时,“打开浏览器”或任何关键字被卡住
我找到了一个“基础设施”解决方法,我想与您分享,包括使用将为您选择证书的代理。你可以安装 Nginx 并配置它为你选择证书,然后直接通过 HTTP 测试网站。
我使用的 nginx.conf:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 0;
ssl_session_cache off;
proxy_ssl_session_reuse off;
server {
listen 8335;
server_name localhost;
location / {
proxy_pass https://localhost:8443/;
proxy_ssl_verify off;
proxy_ssl_certificate keys/A123456.crt.pem;
proxy_ssl_certificate_key keys/A123456.key.pem;
proxy_ssl_session_reuse off;
}
}
server {
listen 8336;
server_name localhost;
location / {
proxy_pass https://localhost:8443/;
proxy_ssl_verify off;
proxy_ssl_certificate keys/B123457.crt.pem;
proxy_ssl_certificate_key keys/B123457.key.pem;
proxy_ssl_session_reuse off;
}
}
}
提示:如果使用 P12 作为证书/密钥文件,可以使用以下 openssl 命令提取证书和密钥:
openssl pkcs12 -in filename.p12 -nocerts -nodes -out filename.key.pem
openssl pkcs12 -in filename.p12 -clcerts -nokeys -out filename.crt.pem
射频测试用例:
TESTCASE001 - Certificate for A123456
[Teardown] Close All Browsers
Open Browser http://localhost:8335/myapp Chrome
Page Should Contain A123456
TESTCASE002 - Certificate for B123457
[Teardown] Close All Browsers
Open Browser http://localhost:8336/myapp Chrome
Page Should Contain B123457
推荐阅读
- grid - VTK - 非结构化网格:更改点/标记点的顺序
- ignite - Apache ignite 节点无法加入网格
- javascript - 如何从 Codepen 中的 NPM 包中导入 Vue 组件?
- html - 背景图像未设置为全高
- ionic3 - 找不到 play-services-auth-base-license.aar (com.google.android.gms:play-services-auth-base-license:11.8.0)
- mysql - 如何在 codeigniter 集成 tinymce 以进行本地图像上传
- javascript - 在横幅 css 动画上滑动文本
- c# - WebAPI 读取 Multipart 两次
- java - 在 Java 中返回布尔类型的结果
- c# - 动态数量的视图应分别绑定到相应的视图模型