Превышено время ожидания подключения к Chrome, повторная попытка… ошибка при использовании ChromeDriver 2.43 и Chrome через Selenium

Aug 16 2020

Честно говоря, я даже не уверен, что делать в этот момент. Я не получаю никаких журналов ошибок в консоли, только сообщения журнала, которые я вставил в сценарии.

Когда я перехожу к строке кода, в которой я создаю конструктор панели мониторинга, он завершает тест и объявляет его неудачным, последнее зарегистрированное сообщение всегда - «О начале поиска».

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

Я не понимаю, что происходит, я могу упустить что-то очень очевидное. Я получаю сбой, но не всегда вижу в консоли конкретное сообщение об ошибке.

Вот тестовый пример, который я пытаюсь запустить:

package com.symphio.testCases;
import java.util.concurrent.TimeUnit;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.symphio.pageObjects.Dashboard;
import com.symphio.pageObjects.loginSymphio;


public class TC_Dashboard_Search_002 extends BaseClass{

    
    @Test
    public void searchForTile() throws InterruptedException {
        
        logger.info("Connected to "+ baseURL);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                
        loginSymphio login = new loginSymphio(driver);
        //logs in
        login.setUserName(userName);
        logger.info("entered username");
        login.setPassWord(passWord);
        logger.info("entered password");
        login.pressSubmit();
        logger.info("button pressed");
        
        
        //searches for tile
        Thread.sleep(3000);


        logger.info("about to start looking");
        Dashboard dashboard = new Dashboard(driver);
        dashboard.mouseMover();
        logger.info("found Icon");
        dashboard.searchBarText(searchText);
        logger.info("input text");
        dashboard.tileClick();      
        logger.info("clicked");
                
    }
}

Вот мой объект DashBoard pageObject

package com.symphio.pageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class Dashboard {
    WebDriver driver;

    public Dashboard(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);     
        
    } 
        
    @FindBy(className="search-container")
    WebElement searchImg;
    
    @FindBy(xpath="//input[@type='search']")
    WebElement searchText;
    
    @FindBy(xpath="//input[contains(@class,'mat-card'), and contains(@class, 'mat-focus-indicator'), and contains(@class, 'arrangement-card')]")
    WebElement tileBox;
    
    
    Actions actions = new Actions(driver);

    public void mouseMover() {
    Actions mouseOverOnElement = actions.moveToElement(searchImg);
    mouseOverOnElement.perform();
    
    }
    
    public void searchBarText(String text) {
        searchText.sendKeys(text);
                
    }
    
    public void tileClick() {
        tileBox.click();
        
        
    }
    
}

Ошибка консоли:

Ответы

DebanjanB Aug 16 2020 at 22:27

Это сообщение об ошибке ...

...[WARNING]: Timed out connecting to Chrome, retrying...
...org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

... подразумевает, что это означает, что комбинация ChromeDriver / google-chrome, которую вы используете, не является последней, поскольку текущая реализация ChromeDriver соответствует спецификациям WebDriver W3C и отражается в начальных журналах:

Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Nov 05, 2019 3:41:53 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C 

Итак, ваша основная проблема - несовместимость между версиями двоичных файлов, которые вы используете, а именно:

  • Вы используете chromedriver = 2.43
  • Примечания к выпуску chromedriver = 2.43 четко упоминают следующее:

Поддерживает Chrome v69-71

  • Возможно, вы используете последнюю версию chrome = 84.0
  • Примечания к выпуску ChromeDriver v84.0 четко упоминают следующее:

Поддерживает Chrome версии 84

Таким образом, между ChromeDriver v2.43 и браузером Chrome v84.0 есть явное несоответствие.


Решение

Убедиться, что:

  • JDK обновлен до текущего уровня JDK 8u251 .
  • Selenium обновлен до текущего уровня. Версия 3.141.59 .
  • ChromeDriver обновлен до текущего уровня ChromeDriver v84.0 .
  • Chrome обновлен до текущего уровня Chrome Version 84.0 . (согласно примечаниям к выпуску ChromeDriver v84.0 )
  • Если ваша базовая версия веб-клиента слишком старая, удалите ее и установите последнюю версию GA и выпущенную версию веб-клиента .
  • Очистите свой Workspace Project через IDE и Rebuild ваш проект только с необходимыми зависимостями.
  • Выполните перезагрузку системы .
  • Выполните @Testкак пользователь без полномочий root .
  • Всегда вызывайте driver.quit()внутри tearDown(){}метода, чтобы корректно закрыть и уничтожить экземпляры WebDriver и Web Client .

Справка

Вы можете найти пару соответствующих подробных обсуждений в:

  • Попытка сеанса с двумя диалектами при условии, что закон Постела выполняется на удаленном конце, и возврат к исходному OSS JSON с использованием ChromeDriver и Selenium
abracants Aug 16 2020 at 09:19

Я думаю, проблема здесь в том, что драйвер еще не инициализирован в классе DashBoard.

попробуйте расширить DashBoard до BaseClass.

public class Dashboard extends BaseClass {
    
    public Dashboard(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);  

}