【问题标题】:Timed out connecting to Chrome, retrying... error using ChromeDriver 2.43 and Chrome through Selenium连接到 Chrome 时超时,正在重试...使用 ChromeDriver 2.43 和通过 Selenium 的 Chrome 时出错
【发布时间】:2020-12-05 13:50:52
【问题描述】:

老实说,此时我什至不知道该怎么做,我在控制台中没有收到任何错误日志,只有我放入脚本中的记录器消息。

当我到达创建仪表板构造函数的代码行时,它会终止测试并声明它失败,最后记录的消息始终是“即将开始查找”

我什至在发布这个问题之前删除了整个构造函数(注释掉了所有代码,删除了驱动程序参数,并在其中放入了一个 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");
                
    }
}

这是我的仪表板页面对象

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

控制台错误:

【问题讨论】:

  • 失败日志在哪里?如果您从 testng.xml 文件运行测试,请将 verbose 属性添加到它。
  • 似乎在我添加了详细属性之后,我能够看到实际错误,这是一个空指针异常错误,这是一个很大的帮助,因为现在我知道要开始解决什么问题了

标签: java selenium maven google-chrome selenium-chromedriver


【解决方案1】:

我认为这里的问题是驱动程序尚未在仪表板类中初始化。

尝试将 DashBoard 扩展到 BaseClass。

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

}   
        

【讨论】:

  • 我将驱动程序初始化为 BaseClass 并将其扩展到测试用例而不是页面对象,因为测试用例正在使用驱动程序功能。我只是将驱动程序传递给构造函数以允许使用页面对象中的方法。
【解决方案2】:

此错误消息...

...[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 的发行说明明确提及以下内容:

支持 Chrome v69-71

  • 可能您使用的是最新的 chrome=84.0
  • ChromeDriver v84.0 的发行说明明确提及以下内容:

支持Chrome 84版

所以 ChromeDriver v2.43Chrome 浏览器 v84.0

之间存在明显的不匹配

解决方案

确保:

  • JDK 升级到当前级别JDK 8u251
  • Selenium 升级到当前级别Version 3.141.59
  • ChromeDriver 已更新到当前的ChromeDriver v84.0 级别。
  • Chrome 已更新到当前的 Chrome 版本 84.0 级别。 (根据ChromeDriver v84.0 release notes
  • 如果您的基本 Web 客户端 版本太旧,请卸载它并安装最新的 GA 和发布版本的 Web 客户端
  • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
  • 进行系统重启
  • 非root用户身份执行@Test
  • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。

参考

您可以在以下位置找到一些相关的详细讨论:

【讨论】:

  • 非常感谢,这是非常有用的建议,我会尽快更新您的信息,但我一定会尝试这些解决方案。
猜你喜欢
  • 2021-07-15
  • 2016-01-02
  • 2020-07-08
  • 2020-05-20
  • 2016-10-30
  • 2017-08-27
  • 2017-09-05
  • 2020-03-06
  • 1970-01-01
相关资源
最近更新 更多