为什么浏览器实例在 Selenium 和 TestNG 中执行后没有得到 close/quit?
Why browser instances not getting close/quit after execution in Selenium and TestNG?
我正在尝试按顺序自动化来自不同测试用例的几个测试用例。即一个接一个测试class执行
在某些情况下,Web 应用程序未获取 closed/quit。即驱动程序实例不是 closing/quitting。我正在尝试在@AfterClass 方法中 quit/close 驱动程序以及测试 class 级别,但它在这两种情况下都不起作用。
在 TestNG Suite 结果中,它显示为已尝试执行,但 webdriver 实例未关闭且新网页实例已打开。
作为参考,我分享了第一个和第二个测试的代码 classes.
请查看以下代码片段:
package managers;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import enums.EnvironmentType;
public class VMSBaseDriver {
public WebDriver driver;
// private static DriverType driverType;
private static EnvironmentType environmentType;
private static final String CHROME_DRIVER_PROPERTY = "webdriver.chrome.driver";
private static final String IE_DRIVER_PROPERTY = "webdriver.ie.driver";
public WebDriver getDriver() {
return driver;
}
@SuppressWarnings("deprecation")
@Parameters("browserName")
@BeforeClass
public void initialize(String browser) throws IOException, InterruptedException {
environmentType = FileReaderManager.getInstance().getConfigReader().getEnvironment();
// driverType = FileReaderManager.getInstance().getConfigReader().getBrowser();
switch (environmentType) {
case LOCAL:
System.out.println("(In Local) Selected environment from config :: " + environmentType);
if (browser.equalsIgnoreCase("firefox")) {
driver = new FirefoxDriver();
} else if (browser.equalsIgnoreCase("chrome")) {
System.setProperty(CHROME_DRIVER_PROPERTY,
FileReaderManager.getInstance().getConfigReader().getDriverPath() + "/chromedriver.exe");
driver = new ChromeDriver();
} else if (browser.equalsIgnoreCase("internetexplorer")) {
System.setProperty(IE_DRIVER_PROPERTY,
FileReaderManager.getInstance().getConfigReader().getDriverPath() + "/IEDriverServer.exe");
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
capabilities.setCapability(InternetExplorerDriver.IE_USE_PRE_PROCESS_PROXY, true);
capabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, false);
driver = new InternetExplorerDriver(capabilities);
}
if (FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize())
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(
FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
// driver.get(FileReaderManager.getInstance().getConfigReader().getApplicationUrl());
driver.get("http://" + getIPAddress());
Thread.sleep(3000);
break;
case REMOTE:
System.out.println("(In Remote) Selected environment from config :: " + environmentType);
if (browser.equalsIgnoreCase("firefox")) {
FirefoxOptions firefoxOptions = new FirefoxOptions();
FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
profile.setAssumeUntrustedCertificateIssuer(false);
profile.setPreference("network.proxy.type", 0);
firefoxOptions.setCapability(FirefoxDriver.PROFILE, profile);
driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), firefoxOptions);
} else if (browser.equalsIgnoreCase("chrome")) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.addArguments("--ignore-certificate-errors");
options.addArguments("--disable-popup-blocking");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
capabilities.setCapability("browserName", "chrome");
driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), capabilities);
} else if (browser.equalsIgnoreCase("internetexplorer")) {
DesiredCapabilities iecapabilities = DesiredCapabilities.internetExplorer();
iecapabilities.setBrowserName("internet explorer");
iecapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
iecapabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
iecapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
iecapabilities.setCapability("ignoreProtectedModeSettings", true);
iecapabilities.setCapability("nativeEvents", false);
iecapabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, "");
iecapabilities.setCapability(InternetExplorerDriver.LOG_LEVEL, "DEBUG");
iecapabilities.setPlatform(Platform.WINDOWS);
driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), iecapabilities);
}
if (FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize())
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(
FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
driver.get("http://" + getIPAddress());
Thread.sleep(3000);
break;
}
}
@AfterClass
public void TeardownTest() {
driver.quit();
}
public String getIPAddress() {
InetAddress IP = null;
try {
IP = InetAddress.getLocalHost();
// System.out.println("IP of my system is := " + IP.getHostAddress());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return IP.getHostAddress();
}
public By extendedLocator(String locString, String value)
{
return By.xpath(String.format(locString, value));
}
}
查看测试Class
package testCases;
import java.io.IOException;
import java.lang.reflect.Method;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.aventstack.extentreports.Status;
import managers.ExtentReportTestManager;
import managers.VMSBaseDriver;
import pageObjects.CamerasAndEncodersPage;
import pageObjects.MonitoringPage;
import pageObjects.ViewsPage;
public class ViewsTest extends VMSBaseDriver {
public MonitoringPage monitoringPage;
public ViewsPage viewsPage;
CamerasAndEncodersPage camerasAndEncodersPage;
public String[] Servers;
@BeforeClass
public void init() throws InterruptedException, IOException {
monitoringPage = PageFactory.initElements(driver, MonitoringPage.class);
viewsPage = PageFactory.initElements(driver, ViewsPage.class);
Servers = viewsPage.getServersList();
driver.navigate().to("http://" + Servers[0]);
Thread.sleep(2000);
viewsPage.SignIn();
Thread.sleep(1000);
viewsPage.WaitUntilLoadingBlockAppears();
Thread.sleep(1000);
viewsPage.WaitUntilLoadingBlockDisappears();
Thread.sleep(1000);
viewsPage.GoToViewsPageFromLanding();
Thread.sleep(1000);
viewsPage.GoToViewsPage();
Thread.sleep(1000);
}
/*
* @AfterMethod public void browserCategory(Method method) {
* ExtentReportTestManager.startTest(method.getName()).assignCategory(((
* RemoteWebDriver) driver).getCapabilities().getBrowserName().toUpperCase());
*
* }
*/
@Test
public void AddNewViewTest(Method method) throws Exception {
//logger = report.startTest("AddNewViewTest");
ExtentReportTestManager.startTest(method.getName()).assignCategory(((RemoteWebDriver) driver).getCapabilities().getBrowserName().toUpperCase());
int viewsCount = viewsPage.GetViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Click on New button");
viewsPage.ClickOnNewButton();
String viewName = "ViewName" + viewsPage.GetRandomDigit(0, 10000);
ExtentReportTestManager.getTest().log(Status.INFO, "Input name " + viewName + " in name field");
viewsPage.InputIntoNameField(viewName);
String remarks = "Remarks for " + viewName;
ExtentReportTestManager.getTest().log(Status.INFO, "Input remarks " + remarks + " in remarks field");
viewsPage.InputIntoRemarksField(remarks);
int layoutSize = viewsPage.GetLayoutSize();
int random = viewsPage.GetRandomDigit(0, layoutSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Select layout ");
viewsPage.ClickOnLayoutByIndex(random);
int viewSize = viewsPage.GetLayoutViewSize();
int resourcesSize = viewsPage.GetResourcesSize();
int rand = viewsPage.GetRandomDigit(1, viewSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Drag " + rand + " resources ");
for (int i = 0; i < rand; i++) {
int viewIndex = viewsPage.GetRandomDigit(0, viewSize);
int resIndex = viewsPage.GetRandomDigit(0, resourcesSize);
String viewId = viewsPage.GetViewIDByIndex(viewIndex);
String resourceId = viewsPage.GetResourcesIDByIndex(resIndex);
viewsPage.DragAndDropCameraToView(resourceId, viewId);
}
int fullViewSize = viewsPage.GetFullViewsSize();
int audioViewsSize = viewsPage.GetAudioViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Press Save button");
viewsPage.PressSaveButton();
String viewNameSaved = viewsPage.GetViewName();
String viewRemarksSaved = viewsPage.GetRemarksText();
int fullViewSizeSaved = viewsPage.GetFullViewsSize();
int audioViewsSizeSaved = viewsPage.GetAudioViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view name is equals to inputed");
AssertJUnit.assertEquals(viewNameSaved, viewName);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view remarks is equals to inputed");
AssertJUnit.assertEquals(viewRemarksSaved, remarks);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that layout has " + fullViewSize + "resources");
AssertJUnit.assertEquals(fullViewSizeSaved, fullViewSize);
// Assert.assertEquals(audioViewsSizeSaved,audioViewsSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Refresh page ");
viewsPage.Refresh();
// int viewsCount = viewsPage.GetViewsSize();
int viewsCountAfterRefresh = viewsPage.GetViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that new view is added ");
AssertJUnit.assertEquals(viewsCountAfterRefresh, viewsCount + 1);
ExtentReportTestManager.getTest().log(Status.INFO, "Click on " + viewName + " view");
viewsPage.ClickOnViewByName(viewName);
Thread.sleep(1000);
String viewNameRefreshed = viewsPage.GetViewName();
String viewRemarksRefreshed = viewsPage.GetRemarksText();
int fullViewSizeRefreshed = viewsPage.GetFullViewsSize();
int audioViewsSizeRefreshed = viewsPage.GetAudioViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view name is equals to inputed after refresh");
AssertJUnit.assertEquals(viewNameRefreshed, viewName);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view remarks is equals to inputed after refresh");
AssertJUnit.assertEquals(viewRemarksRefreshed, remarks);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that layout has " + fullViewSize + "resources after refresh");
AssertJUnit.assertEquals(fullViewSizeRefreshed, fullViewSize);
// Assert.assertEquals(audioViewsSizeRefreshed,audioViewsSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Go to Monitoring page");
viewsPage.GoToMonitoringPage();
ExtentReportTestManager.getTest().log(Status.INFO, "Input into filter field");
monitoringPage.FilterField(viewName);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that new view is present in Monitoring Resources list");
boolean viewIsExist = monitoringPage.VerifyThatResourceIsExist(viewName);
AssertJUnit.assertTrue(viewIsExist);
}
}
WebPageTest class
package testCases;
import java.io.IOException;
import java.lang.reflect.Method;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.aventstack.extentreports.Status;
import managers.ExtentReportTestManager;
import managers.VMSBaseDriver;
import pageObjects.MonitoringPage;
import pageObjects.WebPagesPage;
public class WebPagesTest extends VMSBaseDriver {
public MonitoringPage monitoringPage;
public WebPagesPage webPagesPage;
public String[] Servers;
/*
* @AfterMethod public void browserCategory(Method method) {
* ExtentReportTestManager.startTest(method.getName())
* .assignCategory(((RemoteWebDriver)
* driver).getCapabilities().getBrowserName().toUpperCase());
*
* }
*/
@BeforeClass
public void init() throws IOException, InterruptedException {
monitoringPage = PageFactory.initElements(driver, MonitoringPage.class);
webPagesPage = PageFactory.initElements(driver, WebPagesPage.class);
Servers = webPagesPage.getServersList();
webPagesPage.SignIn();
webPagesPage.WaitUntilLoadingBlockAppears();
webPagesPage.WaitUntilLoadingBlockDisappears();
webPagesPage.GoToWebPagesPageFromLanding();
/*
* driver.navigate().to("http://" + Servers[0]); try{
* driver.switchTo().alert().accept(); }catch(Exception a){}
*
* webPagesPage.WaitUntilLoadingBlockAppears();
* webPagesPage.WaitUntilLoadingBlockDisappears();
* webPagesPage.GoToWebPagesPage();
*/
}
@Test
public void AddNewWebPageTest(Method method) throws InterruptedException {
// logger = report.startTest("AddNewWebPageTest");
ExtentReportTestManager.startTest(method.getName())
.assignCategory(((RemoteWebDriver)
driver).getCapabilities().getBrowserName().toUpperCase());
ExtentReportTestManager.getTest().log(Status.INFO, "Click on new button");
webPagesPage.ClickOnNewButton();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that Save button is disabled");
AssertJUnit.assertFalse(webPagesPage.SaveButtonIsEnabled());
ExtentReportTestManager.getTest().log(Status.INFO, "Check that Cancel button is enabled");
AssertJUnit.assertTrue(webPagesPage.CancelButtonIsEnabled());
}
}
TestNG.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Test Suite">
<listeners>
<listener class-name="reporter.BaseListener" />
</listeners>
<test name="R121 Internet Explorere Execution" thread-count="2" >
<parameter name="browserName" value="internetexplorer" />
<classes>
<class name="testCases.ViewsTest" />
<class name="testCases.WebPagesTest" />
<class name="testCases.AddCameraManually" />
<class name="testCases.AudioChannelsElementsTest" />
<class name="testCases.AudioChannelsTest" />
<class name="testCases.CamerasAndEncodersElementsTest" />
</classes>
</test>
</suite>
您可以在@AfterClass注解中添加alwaysRun = true。像@AfterClass(alwaysRun=true).
如果您的测试 class 是相互独立的,那么最好为每个测试使用单独的会话 class。在这种情况下,您必须在每个测试中编写 @AfterClass 方法 class 以关闭单个会话。
我正在尝试按顺序自动化来自不同测试用例的几个测试用例。即一个接一个测试class执行
在某些情况下,Web 应用程序未获取 closed/quit。即驱动程序实例不是 closing/quitting。我正在尝试在@AfterClass 方法中 quit/close 驱动程序以及测试 class 级别,但它在这两种情况下都不起作用。
在 TestNG Suite 结果中,它显示为已尝试执行,但 webdriver 实例未关闭且新网页实例已打开。
作为参考,我分享了第一个和第二个测试的代码 classes.
请查看以下代码片段:
package managers;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import enums.EnvironmentType;
public class VMSBaseDriver {
public WebDriver driver;
// private static DriverType driverType;
private static EnvironmentType environmentType;
private static final String CHROME_DRIVER_PROPERTY = "webdriver.chrome.driver";
private static final String IE_DRIVER_PROPERTY = "webdriver.ie.driver";
public WebDriver getDriver() {
return driver;
}
@SuppressWarnings("deprecation")
@Parameters("browserName")
@BeforeClass
public void initialize(String browser) throws IOException, InterruptedException {
environmentType = FileReaderManager.getInstance().getConfigReader().getEnvironment();
// driverType = FileReaderManager.getInstance().getConfigReader().getBrowser();
switch (environmentType) {
case LOCAL:
System.out.println("(In Local) Selected environment from config :: " + environmentType);
if (browser.equalsIgnoreCase("firefox")) {
driver = new FirefoxDriver();
} else if (browser.equalsIgnoreCase("chrome")) {
System.setProperty(CHROME_DRIVER_PROPERTY,
FileReaderManager.getInstance().getConfigReader().getDriverPath() + "/chromedriver.exe");
driver = new ChromeDriver();
} else if (browser.equalsIgnoreCase("internetexplorer")) {
System.setProperty(IE_DRIVER_PROPERTY,
FileReaderManager.getInstance().getConfigReader().getDriverPath() + "/IEDriverServer.exe");
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
capabilities.setCapability(InternetExplorerDriver.IE_USE_PRE_PROCESS_PROXY, true);
capabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, false);
driver = new InternetExplorerDriver(capabilities);
}
if (FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize())
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(
FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
// driver.get(FileReaderManager.getInstance().getConfigReader().getApplicationUrl());
driver.get("http://" + getIPAddress());
Thread.sleep(3000);
break;
case REMOTE:
System.out.println("(In Remote) Selected environment from config :: " + environmentType);
if (browser.equalsIgnoreCase("firefox")) {
FirefoxOptions firefoxOptions = new FirefoxOptions();
FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
profile.setAssumeUntrustedCertificateIssuer(false);
profile.setPreference("network.proxy.type", 0);
firefoxOptions.setCapability(FirefoxDriver.PROFILE, profile);
driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), firefoxOptions);
} else if (browser.equalsIgnoreCase("chrome")) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.addArguments("--ignore-certificate-errors");
options.addArguments("--disable-popup-blocking");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
capabilities.setCapability("browserName", "chrome");
driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), capabilities);
} else if (browser.equalsIgnoreCase("internetexplorer")) {
DesiredCapabilities iecapabilities = DesiredCapabilities.internetExplorer();
iecapabilities.setBrowserName("internet explorer");
iecapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
iecapabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
iecapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
iecapabilities.setCapability("ignoreProtectedModeSettings", true);
iecapabilities.setCapability("nativeEvents", false);
iecapabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, "");
iecapabilities.setCapability(InternetExplorerDriver.LOG_LEVEL, "DEBUG");
iecapabilities.setPlatform(Platform.WINDOWS);
driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), iecapabilities);
}
if (FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize())
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(
FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
driver.get("http://" + getIPAddress());
Thread.sleep(3000);
break;
}
}
@AfterClass
public void TeardownTest() {
driver.quit();
}
public String getIPAddress() {
InetAddress IP = null;
try {
IP = InetAddress.getLocalHost();
// System.out.println("IP of my system is := " + IP.getHostAddress());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return IP.getHostAddress();
}
public By extendedLocator(String locString, String value)
{
return By.xpath(String.format(locString, value));
}
}
查看测试Class
package testCases;
import java.io.IOException;
import java.lang.reflect.Method;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.aventstack.extentreports.Status;
import managers.ExtentReportTestManager;
import managers.VMSBaseDriver;
import pageObjects.CamerasAndEncodersPage;
import pageObjects.MonitoringPage;
import pageObjects.ViewsPage;
public class ViewsTest extends VMSBaseDriver {
public MonitoringPage monitoringPage;
public ViewsPage viewsPage;
CamerasAndEncodersPage camerasAndEncodersPage;
public String[] Servers;
@BeforeClass
public void init() throws InterruptedException, IOException {
monitoringPage = PageFactory.initElements(driver, MonitoringPage.class);
viewsPage = PageFactory.initElements(driver, ViewsPage.class);
Servers = viewsPage.getServersList();
driver.navigate().to("http://" + Servers[0]);
Thread.sleep(2000);
viewsPage.SignIn();
Thread.sleep(1000);
viewsPage.WaitUntilLoadingBlockAppears();
Thread.sleep(1000);
viewsPage.WaitUntilLoadingBlockDisappears();
Thread.sleep(1000);
viewsPage.GoToViewsPageFromLanding();
Thread.sleep(1000);
viewsPage.GoToViewsPage();
Thread.sleep(1000);
}
/*
* @AfterMethod public void browserCategory(Method method) {
* ExtentReportTestManager.startTest(method.getName()).assignCategory(((
* RemoteWebDriver) driver).getCapabilities().getBrowserName().toUpperCase());
*
* }
*/
@Test
public void AddNewViewTest(Method method) throws Exception {
//logger = report.startTest("AddNewViewTest");
ExtentReportTestManager.startTest(method.getName()).assignCategory(((RemoteWebDriver) driver).getCapabilities().getBrowserName().toUpperCase());
int viewsCount = viewsPage.GetViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Click on New button");
viewsPage.ClickOnNewButton();
String viewName = "ViewName" + viewsPage.GetRandomDigit(0, 10000);
ExtentReportTestManager.getTest().log(Status.INFO, "Input name " + viewName + " in name field");
viewsPage.InputIntoNameField(viewName);
String remarks = "Remarks for " + viewName;
ExtentReportTestManager.getTest().log(Status.INFO, "Input remarks " + remarks + " in remarks field");
viewsPage.InputIntoRemarksField(remarks);
int layoutSize = viewsPage.GetLayoutSize();
int random = viewsPage.GetRandomDigit(0, layoutSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Select layout ");
viewsPage.ClickOnLayoutByIndex(random);
int viewSize = viewsPage.GetLayoutViewSize();
int resourcesSize = viewsPage.GetResourcesSize();
int rand = viewsPage.GetRandomDigit(1, viewSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Drag " + rand + " resources ");
for (int i = 0; i < rand; i++) {
int viewIndex = viewsPage.GetRandomDigit(0, viewSize);
int resIndex = viewsPage.GetRandomDigit(0, resourcesSize);
String viewId = viewsPage.GetViewIDByIndex(viewIndex);
String resourceId = viewsPage.GetResourcesIDByIndex(resIndex);
viewsPage.DragAndDropCameraToView(resourceId, viewId);
}
int fullViewSize = viewsPage.GetFullViewsSize();
int audioViewsSize = viewsPage.GetAudioViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Press Save button");
viewsPage.PressSaveButton();
String viewNameSaved = viewsPage.GetViewName();
String viewRemarksSaved = viewsPage.GetRemarksText();
int fullViewSizeSaved = viewsPage.GetFullViewsSize();
int audioViewsSizeSaved = viewsPage.GetAudioViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view name is equals to inputed");
AssertJUnit.assertEquals(viewNameSaved, viewName);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view remarks is equals to inputed");
AssertJUnit.assertEquals(viewRemarksSaved, remarks);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that layout has " + fullViewSize + "resources");
AssertJUnit.assertEquals(fullViewSizeSaved, fullViewSize);
// Assert.assertEquals(audioViewsSizeSaved,audioViewsSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Refresh page ");
viewsPage.Refresh();
// int viewsCount = viewsPage.GetViewsSize();
int viewsCountAfterRefresh = viewsPage.GetViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that new view is added ");
AssertJUnit.assertEquals(viewsCountAfterRefresh, viewsCount + 1);
ExtentReportTestManager.getTest().log(Status.INFO, "Click on " + viewName + " view");
viewsPage.ClickOnViewByName(viewName);
Thread.sleep(1000);
String viewNameRefreshed = viewsPage.GetViewName();
String viewRemarksRefreshed = viewsPage.GetRemarksText();
int fullViewSizeRefreshed = viewsPage.GetFullViewsSize();
int audioViewsSizeRefreshed = viewsPage.GetAudioViewsSize();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view name is equals to inputed after refresh");
AssertJUnit.assertEquals(viewNameRefreshed, viewName);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that view remarks is equals to inputed after refresh");
AssertJUnit.assertEquals(viewRemarksRefreshed, remarks);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that layout has " + fullViewSize + "resources after refresh");
AssertJUnit.assertEquals(fullViewSizeRefreshed, fullViewSize);
// Assert.assertEquals(audioViewsSizeRefreshed,audioViewsSize);
ExtentReportTestManager.getTest().log(Status.INFO, "Go to Monitoring page");
viewsPage.GoToMonitoringPage();
ExtentReportTestManager.getTest().log(Status.INFO, "Input into filter field");
monitoringPage.FilterField(viewName);
ExtentReportTestManager.getTest().log(Status.INFO, "Check that new view is present in Monitoring Resources list");
boolean viewIsExist = monitoringPage.VerifyThatResourceIsExist(viewName);
AssertJUnit.assertTrue(viewIsExist);
}
}
WebPageTest class
package testCases;
import java.io.IOException;
import java.lang.reflect.Method;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.aventstack.extentreports.Status;
import managers.ExtentReportTestManager;
import managers.VMSBaseDriver;
import pageObjects.MonitoringPage;
import pageObjects.WebPagesPage;
public class WebPagesTest extends VMSBaseDriver {
public MonitoringPage monitoringPage;
public WebPagesPage webPagesPage;
public String[] Servers;
/*
* @AfterMethod public void browserCategory(Method method) {
* ExtentReportTestManager.startTest(method.getName())
* .assignCategory(((RemoteWebDriver)
* driver).getCapabilities().getBrowserName().toUpperCase());
*
* }
*/
@BeforeClass
public void init() throws IOException, InterruptedException {
monitoringPage = PageFactory.initElements(driver, MonitoringPage.class);
webPagesPage = PageFactory.initElements(driver, WebPagesPage.class);
Servers = webPagesPage.getServersList();
webPagesPage.SignIn();
webPagesPage.WaitUntilLoadingBlockAppears();
webPagesPage.WaitUntilLoadingBlockDisappears();
webPagesPage.GoToWebPagesPageFromLanding();
/*
* driver.navigate().to("http://" + Servers[0]); try{
* driver.switchTo().alert().accept(); }catch(Exception a){}
*
* webPagesPage.WaitUntilLoadingBlockAppears();
* webPagesPage.WaitUntilLoadingBlockDisappears();
* webPagesPage.GoToWebPagesPage();
*/
}
@Test
public void AddNewWebPageTest(Method method) throws InterruptedException {
// logger = report.startTest("AddNewWebPageTest");
ExtentReportTestManager.startTest(method.getName())
.assignCategory(((RemoteWebDriver)
driver).getCapabilities().getBrowserName().toUpperCase());
ExtentReportTestManager.getTest().log(Status.INFO, "Click on new button");
webPagesPage.ClickOnNewButton();
ExtentReportTestManager.getTest().log(Status.INFO, "Check that Save button is disabled");
AssertJUnit.assertFalse(webPagesPage.SaveButtonIsEnabled());
ExtentReportTestManager.getTest().log(Status.INFO, "Check that Cancel button is enabled");
AssertJUnit.assertTrue(webPagesPage.CancelButtonIsEnabled());
}
}
TestNG.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Test Suite">
<listeners>
<listener class-name="reporter.BaseListener" />
</listeners>
<test name="R121 Internet Explorere Execution" thread-count="2" >
<parameter name="browserName" value="internetexplorer" />
<classes>
<class name="testCases.ViewsTest" />
<class name="testCases.WebPagesTest" />
<class name="testCases.AddCameraManually" />
<class name="testCases.AudioChannelsElementsTest" />
<class name="testCases.AudioChannelsTest" />
<class name="testCases.CamerasAndEncodersElementsTest" />
</classes>
</test>
</suite>
您可以在@AfterClass注解中添加alwaysRun = true。像@AfterClass(alwaysRun=true).
如果您的测试 class 是相互独立的,那么最好为每个测试使用单独的会话 class。在这种情况下,您必须在每个测试中编写 @AfterClass 方法 class 以关闭单个会话。