Chromeへの接続がタイムアウトし、再試行しています…Seleniumを介してChromeDriver2.43とChromeを使用するとエラーが発生します

Aug 16 2020

正直なところ、この時点で何をすべきかさえわかりません。コンソールにエラーログが表示されず、スクリプトに入力したロガーメッセージだけが表示されます。

ダッシュボードコンストラクターを作成するコード行に到達すると、テストが終了し、失敗を宣言します。最後にログに記録されたメッセージは、常に「検索を開始しようとしています」です。

この質問を投稿する前に、コンストラクター全体を完全に削除し(すべてのコードをコメントアウトし、ドライバーパラメーターを削除し、printステートメントを挿入しただけです)、クラス内でprintメソッドを呼び出すと、スクリプトが次の行で失敗しました。コンストラクターが発生しました。

私は何が起こっているのか理解していません私は非常に明白な何かを見逃している可能性があります。失敗しますが、コンソールにも特定のエラーメッセージが表示されるとは限りません。

実行しようとしているテストケースは次のとおりです。

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");
                
    }
}

これが私のダッシュボード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 /グーグル・クロームの現在の実装として使用しているコンボは最近のものではありません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のリリースノートには、次のことが明確に記載されています。

Chromev69-71をサポート

  • おそらく、最新のchrome = 84.0を使用しています
  • ChromeDriver v84.0のリリースノートには、次のことが明確に記載されています。

Chromeバージョン84をサポート

そのため、ChromeDriverv2.43Chromeブラウザv84.0の間には明らかな不一致があります


解決

確認しておいて:

  • JDKは現在のレベルのJDK8u251にアップグレードされます。
  • セレンは現在のレベルバージョン3.141.59にアップグレードされます。
  • ChromeDriverは、現在のChromeDriverv84.0レベルに更新されます。
  • Chromeは現在のChromeバージョン84.0レベルに更新されます。(ChromeDriver v84.0リリースノートによる)
  • ベースのWebクライアントのバージョンが古すぎる場合は、それをアンインストールして、最新のGAとリリースされたバージョンのWebクライアントをインストールします。
  • きれいにあなたのプロジェクトワークスペースをごを通じてIDEおよび再構築のみ必要な依存関係を持つプロジェクトを。
  • テイクシステムの再起動を
  • root以外のユーザー@Testとして実行します。
  • 常にメソッドdriver.quit()内を呼び出してtearDown(){}WebDriverインスタンスとWebクライアントインスタンスを正常に閉じて破棄します。

参照

関連する詳細なディスカッションがいくつかあります。

  • ポステルの法則がリモートエンドに当てはまると仮定して、バイダイアレクトセッションを試行し、ChromeDriverとSeleniumを使用して元のOSSJSONにフォールバックする
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);  

}