Chromedriver Не загружается страница в Selenium Tests

Im испытывает сценарий исключения с использованием chromedriver.exe с некоторыми модульными тестами, которые я пишу с помощью Selenium. Когда выполняется первый тест, использующий хромированный рекордер, браузер запускается и проходит тест.

Однако, для всех следующих тестов, которые используют хромированный реверс, браузер не будет успешно перемещаться по URL-адресу.

Браузер запускается, на мгновение символы данных отображаются в адресной строке (как это было в первом тестировании, который работал), тогда правильный адрес вставляется в адресную строку. Однако страница никогда не загружается, и вы получаете стандартную хром . Эта веб-страница недоступна в теле/​​холсте браузера с помощью двух кнопок перезагрузить и больше.

Это известная проблема?

Я использую следующие версии:

Селен: 2.41.0.0
Chromedriver.exe: 2.9.0.0
Visual Studio 2013: 12.0.30110.00 Обновление 1

У меня есть следующий Инициализировать метод в классе ChromeTestDriver, который запускается в методе Setup (aka TestInitialize) для всех тестов:

ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(DriverPath);
var chromeOptions = new ChromeOptions();

chromeDriverService.Port = DriverPort; // 9999 - this is the port for the driver, not the webpage 

webDriver = new ChromeDriver(chromeDriverService, chromeOptions);
webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
webDriver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(10)); 

У меня есть следующий код в методе очистки (aka Teardown) для всех тестов:

TestDriver.CloseWindow();  
TestDriver.Quit();

Исключено следующее исключение:

OpenQA.Selenium.NoSuchWindowException: нет такого окна: целевое окно уже закрыто

Сообщите мне, могу ли я предоставить дополнительную информацию.

Edit Я заметил, что тест IE должен запускаться до того, как Chrome завершится с ошибкой. Как правило, происходит следующее. Тест Chrome работает нормально. Затем запускается тест IE. Вследствие этого все тесты Chrome терпят неудачу.

Дальнейшее редактирование Другим необычным аспектом этого является то, что когда хром был опустошен Selenium для веб-сайта, я больше не могу загружать веб-сайт в Chrome. То есть, если я вручную набираю URL-адрес в адресной строке Chromes, отображается одна и та же пустая страница.

Еще более странно, если я подниму Fiddler2 (который в основном является прокси-сервером), Chrome становится незатронутым. Он работает снова.

Я уверен, что прокси-сервер является проблемой, поскольку моя система не имеет прокси-сервера, и тот же результат возникает, когда Fiddler2 был удален из моей системы.

Симптомы также воспроизводятся моим клиентом, который находится на другом континенте. Мы сотрудничаем с использованием GIT. Поэтому он не ограничивается моей системой.

Пользователь из группы пользователей Selenium Google предложил воспроизвести ошибку, используя webdriver, в действительно простом сценарии (т.е. не как часть структуры тестирования). Вот код для консольного приложения, которое я создал для этого:

private static string Url = "http://localhost:5556";

static void Main(string[] args)
{
    var chromeWebDriver = GetChromeWebDriver();
    var nav = chromeWebDriver.Navigate();
    nav.GoToUrl(Url);
    Thread.Sleep(3000);
    chromeWebDriver.Quit();
    chromeWebDriver.Dispose();

    var iedriver = GetIeDriver();
    var nav1 = iedriver.Navigate();
    nav1.GoToUrl(Url);
    iedriver.Quit();
    iedriver.Dispose();

    var chromeWebDriver2 = GetChromeWebDriver();
    var nav2 = chromeWebDriver2.Navigate();
    nav2.GoToUrl(Url);
    chromeWebDriver2.FindElement(By.LinkText("Login")).Click();

    System.Threading.Thread.Sleep(2000);

    chromeWebDriver2.Quit();
    chromeWebDriver2.Dispose();

    Console.ReadLine();
}

private static IWebDriver GetIeDriver()
{
    InternetExplorerDriverService internetExplorerDriverService =
        InternetExplorerDriverService.CreateDefaultService(
            @"H:\BW\packages\Selenium.WebDriver.IEDriver.2.41.0.1\content");
    InternetExplorerOptions internetExplorerOptions = new InternetExplorerOptions();
    internetExplorerDriverService.Port = 9999;
    IWebDriver webdriver = new InternetExplorerDriver(internetExplorerDriverService, internetExplorerOptions);
    return webdriver;
}

private static IWebDriver GetChromeWebDriver()
{
    var chromeDriverService =
        ChromeDriverService.CreateDefaultService(
            @"H:\BW\packages\Selenium.WebDriver.ChromeDriver.2.10.0.0\content");
    var chromeOptions = new ChromeOptions();
    chromeDriverService.Port = 7777;
    IWebDriver chromeWebDriver = new ChromeDriver(chromeDriverService, chromeOptions);
    return chromeWebDriver;
}

Ответ 1

Попробуйте этот код. Это просто, и это решит вашу проблему.

if(browserType.equals("googleChrome")==true)
{

    System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"\\autoItfiles\\chromedriver.exe");
    driver = new ChromeDriver();

    Report.info("Google chrome browser is opened ");                
}

//Чтобы закрыть экземпляр браузера. Не используйте метод close(), в основном это не работает, а затем Firefox

driver.quit();

Закрыть будет закрыто текущее активное окно, и если это последнее окно, то выполните quit(),

Если ваш тест потерпел неудачу, этот сеанс, вероятно, был мертв, поэтому, когда вы вызываете закрытие, он не знает, куда отправить команду и ничего не делает.

Quit отключит всех клиентов, если нет активных сеансов, поэтому, если вы отправляете выход и не имеете активных сеансов, он просто очистит

Ответ 2

Попробуйте с Chromedriver v2.7

Потому что я тоже столкнулся с той же проблемой

Ответ 3

Вы можете напрямую использовать TestDriver.Quit();, поскольку он будет служить цели, окно будет автоматически закрыто, нет необходимости включать дополнительный код в ваш код, т.е. TestDriver.CloseWindow(); , если вы не имеете дело с несколькими открытыми окнами.

Ответ 4

Вы указываете один и тот же порт для всех ваших драйверов? Если это так, это, скорее всего, вызывает проблему. В вашем сценарии IEDriverServer прослушивает порт 9999. Затем, когда вы запускаете ChromeDriver, он также пытается использовать порт 9999, но не может, потому что он уже принят, поэтому вы получаете сообщение об ошибке страницы.

Попробуйте, чтобы драйверы извлекли свой собственный порт, который автоматически найдет доступный порт для использования, а затем посмотрим, что произойдет.

Ответ 5

Это решило мою проблему, указав номер порта, так как ChromeDriver запущен с оператором, разрешенным только локальные подключения и указывает, что он использует определенный порт.

public static void main(String ... args){
    System.setProperty("webdriver.chrome.driver", "C:\\chromedriver\\2.16\\chromedriver.exe");
    ChromeDriverService.Builder builder =  new ChromeDriverService.Builder();
    ChromeDriverService srvc = builder.usingDriverExecutable(new File("C:\\chromedriver\\2.16\\chromedriver.exe"))
                        .usingPort(9515).build();
    try {
        srvc.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

    //Execute your test-script commands
    WebDriver driver = new ChromeDriver(srvc);
    driver.get("http://www.google.com");
    WebElement searchBox = driver.findElement(By.name("q"));
    searchBox.sendKeys("Chrome Driver");
}

Ответ 6

У меня была такая же проблема, и это было потому, что я использовал неправильный ChromeDriver. Лучше, если вы загрузите драйвер из сторонних драйверов браузера с официального сайта http://www.seleniumhq.org/download/.