Selenium WebDriver при загрузке веб-сайта HTTPS закрывает и снова открывает браузер и даже не пытается взаимодействовать с DOM - PullRequest
0 голосов
/ 04 июля 2019

Selenium WebDriver (запущен из Eclipse Oxygen.3a Release (4.7.3a)), по-видимому, не может обрабатывать веб-сайты HTTPS.

Под этим я подразумеваю следующее: при загрузке страницы (независимо от того, перенаправляет она или нет, пробовал с сайтами входа в систему gitlab и AWS)

  • Страница входа загружается правильно (без проблем с сертификатом SSL, любое перенаправление происходит нормально), но Selenium ничего не делает (режим отладки показывает, что он даже не пытается выполнить код входа в систему)
  • Время ожидания истекает (browserWaitTimeout = 15) и закрывает / открывает страницу входа в систему
  • Это происходит до 4-го раза, когда Selenium, наконец, достигает моего кода входа в систему (точка останова, которую я установил там, наконец-то достигает цели), но это происходит между закрытием и повторным открытием страницы браузера, таким образом, он никогда не обнаруживает DOM и завершается ошибкой.

И самое неприятное, консоль не показывает ошибок. Здесь: Chrome:

Jul 03, 2019 8:40:44 AM com.fincad.vcr.qa.support.WebDriverFactory createWebDriver

INFO: Web driver is created successfully

Jul 03, 2019 8:40:55 AM com.fincad.vcr.qa.support.WebDriverFactory quitWebDriver

INFO: Web driver quits successfully

Вот так, как в буквальном смысле (обратите внимание на 15-секундный пробел? Это browserWaitTimeout).

a) Я попробовал FF, где я увидел ошибки от Marionette:

1562172157538   Marionette  INFO    Listening on port 56792

1562172157572   addons.xpi-utils    DEBUG   Successfully read XPI database

1562172157603   addons.manager  DEBUG   Registering upgrade listener for 
formautofill@mozilla.org

Jul 03, 2019 9:42:37 AM org.openqa.selenium.remote.ProtocolHandshake createSession

INFO: Detected dialect: W3C

Jul 03, 2019 9:42:38 AM com.fincad.vcr.qa.support.WebDriverFactory createWebDriver

INFO: Web driver is created successfully

1562172170219   Marionette  INFO    Stopped listening on port 56792

1562172170243   addons.xpi  DEBUG   Calling bootstrap method shutdown on webcompat@mozilla.org version 4.0.0

1562172170249   addons.xpi  DEBUG   Calling bootstrap method shutdown on screenshots@mozilla.org version 37.1.0

1562172170253   addons.xpi  DEBUG   Calling bootstrap method shutdown on fxmonitor@mozilla.org version 3.0

1562172170254   addons.xpi  DEBUG   Calling bootstrap method shutdown on formautofill@mozilla.org version 1.0

[Parent 12824, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Child 21788, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Child 21788, Chrome_Chi[Parent 12824, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Child 6644, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Child 6644, Chrome_ChildThread] WAR[Parent 12824, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Child 17844, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Child 17844, Chrome_ChildThread] WARNING: pipe er[Parent 12824, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1560988628/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341

[Chi###!!! [Parent][MessageChannel] Error: (msgtype=0x1F0099,name=PBrowser::Msg_UpdateNativeWindowHandle) Closed channel: cannot send/recv

Я гуглил, и люди упоминали, что это из-за устаревшего драйвера FF, поэтому я обновил, но это не помогло (появляются те же ошибки). А в IE это похоже на Chrome: нет сообщений об ошибках или предупреждений вообще.

Мои драйверы: Selenium WebDriver: 3.14.0 (32-разрядная версия) Geckodriver 0.24.0 (32-разрядная версия) Хромированный драйвер 74.0.3729.6 (32-разрядный) IEDriverServer 3.8.0 (32-разрядная версия)

И мои браузеры: Браузер Chrome: 75.0.3770.100 Браузер FF: 67.0.4 IE браузер: 11.557.17763

Вот как я создаю свои драйверы:

private static void createFirefoxDriver() {
    setCapability("firefox");
    GeckoDriverService.Builder builder = new GeckoDriverService.Builder();
    GeckoDriverService service = builder.build();
    FirefoxOptions options = new FirefoxOptions(capabilities);
    // Read the default firefox profile
    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile myProfile = profile.getProfile("default");
    // Disable the web page from asking if really want to leave
    myProfile.setPreference("dom.disable_beforeunload", true);
    options.setProfile(myProfile);
    driver = new FirefoxDriver(service, options);
}

private static void createChromeDriver() {
    setCapability("chrome");
    ChromeDriverService.Builder builder = new ChromeDriverService.Builder();
    ChromeDriverService service = builder.build();
    ChromeOptions options = new ChromeOptions();
    options.merge(capabilities);
    driver = new ChromeDriver(service, options);
}

Вот как я загружаю URL (локальный веб-драйвер):

private static void createLocalWebDriver() {
    String browser = ConfigParser.getBrowser();
    LOGGER.info("Target Browser: " + browser);

    switch (browser) {
        case "firefox":
            System.setProperty("webdriver.gecko.driver", ConfigParser.getGeckoDriver());
            System.out.println("GeckoDriver on: " + ConfigParser.getGeckoDriver());
            createFirefoxDriver();
            break;
        case "chrome":
            System.setProperty("webdriver.chrome.driver", ConfigParser.getChromeDriver());
            System.out.println("ChromeDriver on: " + ConfigParser.getChromeDriver());
            createChromeDriver();
            break;
        case "ie":
            System.setProperty("webdriver.ie.driver", ConfigParser.getIEDriverServer());
            System.out.println("IEDriver on: " + ConfigParser.getIEDriverServer());
            createIEDriver();
            break;
        default:
            LOGGER.warning("Unsupported Browser: " + browser);
            break;
    }
}
private static void createFirefoxDriver() {`enter code here`
    setCapability("firefox");
    GeckoDriverService.Builder builder = new GeckoDriverService.Builder();
    GeckoDriverService service = builder.build();
    FirefoxOptions options = new FirefoxOptions(capabilities);
    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile myProfile = profile.getProfile("default");
    myProfile.setPreference("dom.disable_beforeunload", true);
    options.setProfile(myProfile);
    driver = new FirefoxDriver(service, options);
}

private static void createChromeDriver() {
    setCapability("chrome");
    ChromeDriverService.Builder builder = new ChromeDriverService.Builder();
    ChromeDriverService service = builder.build();
    ChromeOptions options = new ChromeOptions();
    options.merge(capabilities);
    driver = new ChromeDriver(service, options);
}

private static void createIEDriver() {
    setCapability("ie");
    InternetExplorerDriverService.Builder builder = new InternetExplorerDriverService.Builder();
    InternetExplorerDriverService service = builder.build();
    InternetExplorerOptions options = new InternetExplorerOptions(capabilities);
    driver = new InternetExplorerDriver(service, options);
    CommonJS.executeScript(driver, "window.localStorage.clear();");
    CommonJS.executeScript(driver, "window.sessionStorage.clear();");
}

private static void setCapability(String browser) {
    capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
    capabilities.setCapability(CapabilityType.ELEMENT_SCROLL_BEHAVIOR, true);
    if (browser.equalsIgnoreCase("ie")) {
        capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
        capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
        capabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, ConfigParser.getAppUrl());
    } else if (browser.equalsIgnoreCase("chrome")) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("chrome.switches","--disable-extensions");
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    }
}

Извините за весь код, но я уверен, что меня спросят об этих деталях, отсюда и мое размещение там. Короче говоря:

  • Это происходит только с URL-адресами HTTPS

  • отлично работает URL без HTTPS

  • Это не проблема сертификата SSL, в противном случае я бы увидел это на экране «Это соединение ненадежное».

1 Ответ

0 голосов
/ 04 июля 2019

Это была проблема при загрузке кода страницы. Нашел раздел, который явно ожидал только HTTP, поэтому отказался загружать любой HTTPS URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...