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
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
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();
}
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()
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)
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
Une suggestion serait d'utiliser Sikuli pour cliquer sur le bouton OK dans le certificat.
Pas:
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 .