首页 > 解决方案 > 在给定的 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}

标签: python-3.xgoogle-chromeselenium-webdriverfirefoxrobotframework

解决方案


在对这个主题进行了研究之后,似乎没有简单的方法可以解决这种情况:

  • 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

推荐阅读