web-dev-qa-db-ja.com

selenium chromeドライバ選択証明書ポップアップ確認が機能しない

Selenium chromewebdriver 3.7を使用してテストを自動化しています。サイトを起動すると、以下のような証明書選択ポップアップが表示されます enter image description here

ただし、[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]をクリックするにはどうすればよいですか?これは私が見つけた最もうまくいかない解決策です ここにリンク

9
user4237435

同じ問題があり、ロボットを使用して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();
       }
1
eskoba

また、署名付き証明書の使用に関する警告を受け入れることに問題がありました。 @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()
3
chainstair

証明書が見つからない、無効である、または自己署名されている場合に、プロンプトが表示されるのをスキップすることもできます。

ドライバーインスタンスを作成するときに、acceptInsecureCertsDesiredCapabilitiesに設定して渡す必要があります。

たとえば、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

それでも実際であれば、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()のようなコードで使用します

0
Bidonus UA

1つの提案は、Sikuliを使用して証明書のOKボタンをクリックすることです。

手順:

  1. [OK]ボタンのスクリーンショットを撮って保存します。
  2. Sikuli-script.jarをダウンロードして、プロジェクトのビルドパスに追加します。
  3. クリックするUI要素のスクリーンショットを撮って、ローカルに保存します。
  4. 次のコードをテストケースに追加します。

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

Sikuliが提供するその他の関数は here にあります。

0
Prathibha