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();
私の裁判はすべて失敗しました。このポップアップウィンドウで[OK]をクリックするにはどうすればよいですか?これは私が見つけた最もうまくいかない解決策です ここにリンク
同じ問題があり、ロボットを使用して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();
}
また、署名付き証明書の使用に関する警告を受け入れることに問題がありました。 @eskobaのソリューションは魅力のように機能しました。 Enterボタンを10回押したため、関数は最終的なものではありません。これを行ったのは、Webドライバーが実際に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()
証明書が見つからない、無効である、または自己署名されている場合に、プロンプトが表示されるのをスキップすることもできます。
ドライバーインスタンスを作成するときに、acceptInsecureCerts
をDesiredCapabilities
に設定して渡す必要があります。
たとえば、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)
それでも実際であれば、Macでも同じ問題があり、解決策は簡単でした。
chromeがAutoSelectCertificateForUrls
ポリシーに設定されている場合:
_defaults write com.google.Chrome AutoSelectCertificateForUrls -array-add -string '{"pattern":"[*.]example.com","filter":{"ISSUER":{"CN":"**cert issuer**"}, "SUBJECT":{"CN": "**cert name**"}}}'
_
サファリの場合:
_security set-identity-preference -c "**cert name**" -s "**example.com**"
_
次に、それをPythonのsubprocess.call()
のようなコードで使用します
1つの提案は、Sikuliを使用して証明書のOKボタンをクリックすることです。
手順:
次のコードをテストケースに追加します。
Screen s=new Screen(); s.click(“image name”);
Sikuliが提供するその他の関数は here にあります。