web-dev-qa-db-fra.com

selenium chrome pilote la confirmation du certificat de sélection du pilote ne fonctionne pas

J'automatise les tests avec Selenium chromewebdriver 3.7. Chaque fois que je lance le site, j'obtiens une fenêtre de sélection de certificat comme celle ci-dessous enter image description here

Cependant je ne peux pas cliquer sur le bouton OK. Ce sont les options que j'ai essayées

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

Tous mes essais ont échoué. Comment puis-je cliquer sur OK dans cette fenêtre contextuelle? C'est la solution la plus proche que j'ai trouvée qui ne fonctionne pas Lien ici

9
user4237435

J'ai eu le même problème et j'ai pu le résoudre en utilisant le robot, en créant une fonction pour l'URL et en la transmettant à un autre 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();
       }
1
eskoba

J'ai également rencontré des problèmes pour accepter l'avertissement concernant l'utilisation d'un certificat signé. La solution de @eskoba a fonctionné comme un charme. Les fonctions ne sont PAS définitives, car j'ai laissé le bouton Entrée appuyer 10 fois. Je l'ai fait, car le pilote Web a besoin de beaucoup de temps avant d'appeler l'URL. En attendant, il commence déjà à appuyer.

En 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
chainstair

Vous pouvez également ignorer le fait d'être invité lorsqu'un certificat est manquant, invalide ou auto-signé.

Vous devez définir acceptInsecureCerts dans DesiredCapabilities et le transmettre lorsque vous créez une instance de pilote.

par exemple, en 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)
0
Corey Goldberg

Si toujours d'actualité, j'ai eu le même problème sur Mac, et la solution était simple:

  • pour chrome est défini AutoSelectCertificateForUrls politique comme ça:

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

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

puis utilisez-le dans du code comme subprocess.call() en python

0
Bidonus UA

Une suggestion serait d'utiliser Sikuli pour cliquer sur le bouton OK dans le certificat.

Pas:

  1. Prenez une capture d'écran du bouton OK et enregistrez-la.
  2. Téléchargez sikuli-script.jar et ajoutez-le au chemin de génération de Project.
  3. Prenez une capture d'écran de l'élément d'interface utilisateur sur lequel cliquer et enregistrez-le localement.
  4. Ajoutez le code suivant au scénario de test.

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

D'autres fonctions fournies par Sikuli peuvent être trouvées ici .

0
Prathibha