java selenium chrome驱动程序选择证书弹出确认不工作

t9aqgxwy  于 2023-05-05  发布在  Java
关注(0)|答案(5)|浏览(160)

我正在使用selenium chromewebdriver 3.7进行自动化测试。每当我启动该网站时,我都会看到一个证书选择弹出窗口,如下面的

但是我无法点击OK按钮。这些是我尝试过的选项

//I have tried getWindowHandle like this  
 String  handle= driver.getWindowHandle();
        this.driver.switchTo().window(handle);
//I have alos tried switching and accept
 driver.switchTo().alert().accept();
//I have also tried to force the enter key like this
 robot.keyPress(KeyEvent.VK_ENTER);
 robot.keyRelease(KeyEvent.VK_ENTER);
// I also tried this way
 Scanner keyboard = new Scanner(System.in);
 keyboard.nextLine();

我所有的尝试都失败了。如何在此弹出窗口中单击“确定”?这是我找到的最接近的解决方案,但不起作用Link here

wooyq4lh

wooyq4lh1#

我在接受使用签名证书的警告时也遇到了问题。@eskoba的解决方案非常有效。函数不是最终的,因为我让回车键按了10次。我做了这个,因为webdriver需要很长时间才能真正调用url。与此同时,他已经开始施压了。

Python中

def threaded_function():
    #Calls the website
    browser.get(url)

def threaded_function2():
    #Presses 10 times
    for i in range(0,10):
        pyautogui.press('enter')

#Calling the website and pressing 10 times in the same time
thread2 = Thread(target = threaded_function2)
thread2.start()

thread = Thread(target = threaded_function)
thread.start()
n53p2ov0

n53p2ov02#

如果仍然是实际的,我在Mac上遇到了同样的问题,解决方案很简单:

  • chrome的AutoSelectCertificateForUrls策略是这样的:
defaults write com.google.Chrome AutoSelectCertificateForUrls -array-add -string '{"pattern":"[*.]example.com","filter":{"ISSUER":{"CN":"**cert issuer**"}, "SUBJECT":{"CN": "**cert name**"}}}'
  • safari:
security set-identity-preference -c "**cert name**" -s "**example.com**"

然后在代码中使用它,如python中的subprocess.call()

zi8p0yeb

zi8p0yeb3#

我遇到了同样的问题,我能够通过使用机器人解决它,为URL创建函数并将其传递到不同的线程。

Runnable mlauncher = () -> {
    try {

      driver.get(url);
     } catch (Exception e) {
          e.printStackTrace();
       }
    };

public void myfunction {
 try {

   Thread mthread = new Thread(mlauncher);
   mthread.start

  robot.keyPress(KeyEvent.VK_ENTER);
  robot.keyRelease(KeyEvent.VK_ENTER);

 } catch (Exception e) {
          e.printStackTrace();
       }
1dkrff03

1dkrff034#

一个建议是,使用Sikuli单击证书中的OK按钮。
步骤:
1.对“确定”按钮进行截图并保存。
1.下载sikuli-script.jar并将其添加到Project的Build路径。
1.截取要单击的UI元素的屏幕截图并将其保存在本地。
1.将以下代码添加到测试用例中。
Screen s=new Screen(); s.click(“image name”);
Sikuli提供的其他函数可以在here中找到。

ryevplcw

ryevplcw5#

您还可以跳过证书丢失、无效或自签名时的提示。
您需要在DesiredCapabilities中设置acceptInsecureCerts,并在创建驱动程序示例时传递它。
在Python中:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.CHROME.copy()
caps['acceptInsecureCerts'] = True
driver = webdriver.Chrome(desired_capabilities=caps)

相关问题