selenium chrome driver select certificate popup confirmation not working

不问归期 提交于 2020-01-28 05:49:26

问题


I am automating tests using selenium chromewebdriver 3.7. Whenever I lauch the site, I get a certificate selection popup like the one below

However I am not able to click on the OK button. These are the options I have tried

 //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();

All my trials have failed. How can I click on OK on this popup window? This is the closest solution I found which is not working Link here


回答1:


I had the same problem and I was able to solve it by using the robot, creating function for the url and passing it to a different thread.

    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();
       }



回答2:


I also had problems with accepting the warning for using a signed certificate. The solution of @eskoba worked like a charm. The functions are NOT final, because I let the enter button press for 10 times. I made this, because the webdriver needs a long time until it actually calls the url. In the meantime he starts pressing already.

In 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()



回答3:


You can also skip being prompted when a certificate is missing, invalid, or self-signed.

You would need to set acceptInsecureCerts in DesiredCapabilities and pass that when you create a driver instance.

for example, in 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)



回答4:


If still actual, I had same issue on Mac, and solution was simple:

  • for chrome is set AutoSelectCertificateForUrls policy like that:

    defaults write com.google.Chrome AutoSelectCertificateForUrls -array-add -string '{"pattern":"[*.]example.com","filter":{"ISSUER":{"CN":"**cert issuer**"}, "SUBJECT":{"CN": "**cert name**"}}}'
    
  • for safari:

    security set-identity-preference -c "**cert name**" -s "**example.com**"
    

then use it in code like subprocess.call() in python




回答5:


One suggestion would be, use Sikuli to click on OK button in the certificate.

Steps:

  1. Take screenshot of OK button and save it.
  2. Download sikuli-script.jar and add it to Project's Build path.
  3. Take a screenshot of the UI Element to be clicked and save it locally.
  4. Add the following code to the test case.

    Screen s=new Screen(); s.click(“image name”);

Other functions Sikuli provides can be found here.



来源:https://stackoverflow.com/questions/49512058/selenium-chrome-driver-select-certificate-popup-confirmation-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!