2 回答
TA贡献2016条经验 获得超9个赞
嗨。让我们尝试逐步调试它:
1)将selenium 服务器更新到最新的一个版本
2) 确保您也使用最新的chromedriver
您能否也分享一下testng.XML
套件如何组织和分享您尝试执行的测试代码?
从我看到的异常中 - 它试图访问浏览器实例并且由于某种原因它无法访问。可能在代码中被调用driver.close();
或 driver.quit();
某处。
关于 testNG 配置 - 您可以查看框架规范 和/或 表示测试套件如何组织的示例。
希望它对你有帮助,问候,尤金
============== UPD 2019/03/02 除了上面提供的显式版本控制@debanjanB ^^ 之外,我建议通过以下方式重新编写代码:
改进 #1 驱动程序初始化(我已将此方法与适当的配置分开;我个人使用的是 selenium GRID,但您可以继续使用 Chromedriver 您在代码中使用,我会说这是习惯问题):
public static WebDriver driverSetUp(WebDriver driver) throws MalformedURLException {
ChromeOptions options = new ChromeOptions();
options.addArguments("-incognito");
DesiredCapabilities capability = DesiredCapabilities.chrome();
capability.setCapability(ChromeOptions.CAPABILITY, options);
//System.setProperty("webdriver.chrome.driver", System.getProperty("user.home")+"/Documents/:Proj_folder:/chromedriver");
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
capability.setBrowserName("chrome");
capability.setCapability("nativeEvents", true);
LoggingPreferences logs = new LoggingPreferences();
//Javascript console logs from the browser
logs.enable(LogType.BROWSER, Level.WARNING);
logs.enable(LogType.PERFORMANCE, Level.ALL);
capability.setCapability(CapabilityType.LOGGING_PREFS, logs);
String webDriverURL = "http://" + environmentData.getHubIP() + ":" + environmentData.getHubPort() + "/wd/hub";
log.info("creating driver instance on the URL :#### " + webDriverURL);
driver = new RemoteWebDriver(new URL(webDriverURL), capability);
driver.manage().window().maximize();
return driver;}
public static WebDriver driverInit(WebDriver driver, String startingUrl) throws MalformedURLException {
driver = DriverInit.driverSetUp(driver);
driver.get(startingUrl);
return driver;
}
如果您需要执行驱动程序重新启动操作 - 您可以使用driver.close() 包含在 try-catch 块中的驱动程序初始化
public static WebDriver driverRestart(WebDriver driver, String startingUrl) throws MalformedURLException {
try {
driver.close();
} catch (WebDriverException e) {
log.error("#### oops, seems driver instance have been already closed. Doing re-initialization right now!", e.getMessage(), e);
}
return driverInit(driver, startingUrl);
}
所以AfterMethod看起来像(请添加 'alwaysRun=true'标志):
@AfterMethod(alwaysRun = true)
public void closeDriverInstance() {
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(
String.format("c:\\SeleniumScreenshots\\%s.jpg", count)));
driver.close();
} catch (Exception e) {
log.info(" oops, it seems that driver instance have been already closed.");
}
}
改进#2
请稍微修改 testng XML(请在套件标签中显式添加parallel="false"标签):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="CustomerPortalTestSuite-SIT2" parallel="false" thread-count="5" verbose="8">
<test name="CustomerPortalTestExecution">
<classes>
<class name="testclasses.CustomerPortalSupportTest"/>
<class name="testclasses.CustomerPortalAccountTest"/>
<class name="testclasses.CustomerPortalBillingTest"/>
<class name="testclasses.CustomerPortalHomeTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
改进#3(假设)如果没有帮助。根据经验,如果对于某些测试,chrome 实例已启动并且多次关闭并再次重新启动 - 您可能仍然有一堆 chromedriver.exe进程(挂在您的系统中并阻止新的 chromedriver 处理启动)
因此,如果您发现您有很多进程,要在 WIN 中杀死它们 - 您可以调用以下命令:
Taskkill /T /F /IM chromedriver.exe
因此,考虑到您在每个测试方法之后每次都“杀死”您的 chrome,您还可以在 after 方法中另外杀死任何 chromedriver 进程(此处解释了 如何执行包装在 java 代码中的 cmd)。
TA贡献1810条经验 获得超5个赞
此错误消息...
org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'PDC2LAP-7173253', ip: '10.170.10.178', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_162'
Driver info: driver.version: ChromeDriver
..意味着ChromeDriver无法与WebElement交互。
您的主要问题是您使用的二进制文件版本之间的不兼容,如下所示:
尽管您提到了使用:
Java版本是Java版本“1.8.0_201”
ChromeDriver 2.43.600210
Tracelogs 说:
java.version: '1.8.0_162'
当您使用Selenium v3.141.59时,组件不兼容。
解决方案
将JDK升级到最新级别JDK 8u201。
将ChromeDriver升级到当前的ChromeDriver v2.46级别。
将Chrome版本保持在Chrome v71-73级别之间。(根据 ChromeDriver v2.46 发行说明)
添加回答
举报