2 回答

TA貢獻2016條經驗 獲得超9個贊
嗨。讓我們嘗試逐步調試它:
1)將selenium 服務器更新到最新的一個版本
2) 確保您也使用最新的chromedriver
您能否也分享一下testng.XML
套件如何組織和分享您嘗試執行的測試代碼?
從我看到的異常中 - 它試圖訪問瀏覽器實例并且由于某種原因它無法訪問??赡茉诖a中被調用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 發行說明)
添加回答
舉報