【问题标题】:How to Run two @Test methods in a single class file using webdriver and TestNG如何使用 webdriver 和 TestNG 在单个类文件中运行两个 @Test 方法
【发布时间】:2017-07-27 15:08:42
【问题描述】:

我在 Web Driver 中有一段代码,如下所述。一个类中有两个 @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

【问题讨论】:

  • 您可能对 TestNG 所指的测试感到困惑,当您说 parallel="tests" 时,它将考虑您在 Test One 中提到的所有测试b>测试两个配置。更改配置以仅包含特定测试而不是整个班级,问题可能会得到解决。
  • Hey Gagan,你能告诉我在这种情况下我应该写什么吗?浏览器并行模式
  • 在这种情况下任何人都可以帮助我
  • 嗨,Akash,我相信你应该改写你的标题。据我了解,您没有两个要在一个类文件中执行的方法,但更多的是您有两个要并行执行的测试。如果这是您所追求的,我将发布正确的 XML 作为解决方案。

标签: java selenium automated-tests testng selenium-firefoxdriver


【解决方案1】:

实现这项工作的一种方法是将您的 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>

【讨论】:

  • 你的答案是一种解决方法,但不是这个问题的解决方案通过为 2 个测试创建 2 个不同的类,然后并行执行它们很容易,无论如何我知道我的问题是我是否想执行 2 个测试如果可能的话,从单个类文件并行到 2 个不同的浏览器
  • 好吧,您可以更改parallel="methods",但我认为您不能使用xml 参数。您将需要以编程方式处理您的浏览器变量。祝你好运
猜你喜欢
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多