如何使用 webdriver 和 TestNG 在单个 class 文件中 运行 两个 @Test 方法
How to Run two @Test methods in a single class file using webdriver and TestNG
我在Web Driver中有一段代码,如下所述。单个 class 中有两个 @Test
方法,我试图使用 testng.xml
.
并行执行
谁能告诉我我做错了什么
public class CrossBrowserScript {
WebDriver driver;
@BeforeTest
@Parameters("browser")
public void setup(String browser) throws Exception{
//Check if parameter passed from TestNG is 'firefox'
if(browser.equalsIgnoreCase("firefox")){
//create firefox instance
driver = new FirefoxDriver();
}
//Check if parameter passed as 'chrome'
else if(browser.equalsIgnoreCase("chrome")){
//set path to chromedriver.exe You may need to download it from http://code.google.com/p/selenium/wiki/ChromeDriver
System.setProperty("webdriver.chrome.driver","E:\Maven\chromedriver.exe");
//create chrome instance
driver = new ChromeDriver();
}
else if(browser.equalsIgnoreCase("ie")){
//set path to IEdriver.exe You may need to download it from
// 32 bits http://selenium-release.storage.googleapis.com/2.42/IEDriverServer_Win32_2.42.0.zip
// 64 bits http://selenium-release.storage.googleapis.com/2.42/IEDriverServer_x64_2.42.0.zip
System.setProperty("webdriver.ie.driver","E:\Maven\IEDriverServer.exe");
//create chrome instance
driver = new InternetExplorerDriver();
}
else{
//If no browser passed throw exception
throw new Exception("Browser is not correct");
}
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
}
package checking;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class test extends CrossBrowserScript{
@Parameters({ "browser" })
@Test
public void checking_value(){
//WebDriver driver = new FirefoxDriver();
driver.get("http://www.sourcefuse.com/");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
if(driver.getPageSource().contains("Our Work"))
{
System.out.println("Found the text");
}
else
{
System.out.println("Not able to found the text");
}
}
@Parameters({ "browser" })
@Test
public void second_method(){
driver.get("http://www.sourcefuse.com/");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
if(driver.getPageSource().contains("Our Work"))
{
System.out.println("Found the text");
}
else
{
System.out.println("Not able to found the text");
}
}
}
*************************************************************
TestNG.xml File
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Multiple Tests" parallel="tests" thread-count="2">
<test name="Test One">
<parameter name="browser" value="Chrome" />
<classes>
<class name="checking.test">
</class>
</classes>
</test>
<test name="Test two">
<parameter name="browser" value="Firefox" />
<classes>
<class name="checking.test">
</class>
</classes>
</test>
</suite>
当我执行时,它会打开 2 个浏览器并执行上面的代码总共 4 次,但我担心的是我想在 2 个不同的浏览器中 运行 两个 @Test
。
使这项工作起作用的一种方法是将您的 2 种方法粘贴到 2 种不同的 类 中,这两种方法都扩展了您的 CrossBrowserScript(即 testChrome 和 testFirefox)
在您的 xml 中试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Multiple Tests" parallel="tests" thread-count="2">
<test name="Test One">
<parameter name="browser" value="Chrome" />
<classes>
<class name="checking.testChrome">
</class>
</classes>
</test>
<test name="Test two">
<parameter name="browser" value="Firefox" />
<classes>
<class name="checking.testFirefox">
</class>
</classes>
</test>
</suite>
我在Web Driver中有一段代码,如下所述。单个 class 中有两个 @Test
方法,我试图使用 testng.xml
.
谁能告诉我我做错了什么
public class CrossBrowserScript {
WebDriver driver;
@BeforeTest
@Parameters("browser")
public void setup(String browser) throws Exception{
//Check if parameter passed from TestNG is 'firefox'
if(browser.equalsIgnoreCase("firefox")){
//create firefox instance
driver = new FirefoxDriver();
}
//Check if parameter passed as 'chrome'
else if(browser.equalsIgnoreCase("chrome")){
//set path to chromedriver.exe You may need to download it from http://code.google.com/p/selenium/wiki/ChromeDriver
System.setProperty("webdriver.chrome.driver","E:\Maven\chromedriver.exe");
//create chrome instance
driver = new ChromeDriver();
}
else if(browser.equalsIgnoreCase("ie")){
//set path to IEdriver.exe You may need to download it from
// 32 bits http://selenium-release.storage.googleapis.com/2.42/IEDriverServer_Win32_2.42.0.zip
// 64 bits http://selenium-release.storage.googleapis.com/2.42/IEDriverServer_x64_2.42.0.zip
System.setProperty("webdriver.ie.driver","E:\Maven\IEDriverServer.exe");
//create chrome instance
driver = new InternetExplorerDriver();
}
else{
//If no browser passed throw exception
throw new Exception("Browser is not correct");
}
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
}
package checking;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class test extends CrossBrowserScript{
@Parameters({ "browser" })
@Test
public void checking_value(){
//WebDriver driver = new FirefoxDriver();
driver.get("http://www.sourcefuse.com/");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
if(driver.getPageSource().contains("Our Work"))
{
System.out.println("Found the text");
}
else
{
System.out.println("Not able to found the text");
}
}
@Parameters({ "browser" })
@Test
public void second_method(){
driver.get("http://www.sourcefuse.com/");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
if(driver.getPageSource().contains("Our Work"))
{
System.out.println("Found the text");
}
else
{
System.out.println("Not able to found the text");
}
}
}
*************************************************************
TestNG.xml File
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Multiple Tests" parallel="tests" thread-count="2">
<test name="Test One">
<parameter name="browser" value="Chrome" />
<classes>
<class name="checking.test">
</class>
</classes>
</test>
<test name="Test two">
<parameter name="browser" value="Firefox" />
<classes>
<class name="checking.test">
</class>
</classes>
</test>
</suite>
当我执行时,它会打开 2 个浏览器并执行上面的代码总共 4 次,但我担心的是我想在 2 个不同的浏览器中 运行 两个 @Test
。
使这项工作起作用的一种方法是将您的 2 种方法粘贴到 2 种不同的 类 中,这两种方法都扩展了您的 CrossBrowserScript(即 testChrome 和 testFirefox)
在您的 xml 中试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Multiple Tests" parallel="tests" thread-count="2">
<test name="Test One">
<parameter name="browser" value="Chrome" />
<classes>
<class name="checking.testChrome">
</class>
</classes>
</test>
<test name="Test two">
<parameter name="browser" value="Firefox" />
<classes>
<class name="checking.testFirefox">
</class>
</classes>
</test>
</suite>