testng在另一种方法中调用参数化方法

时间:2014-08-29 10:40:26

标签: java eclipse selenium-webdriver testng parameterized

我是TestNG和Selenium的新手。我遇到了这个问题,直到现在没有任何帮助。 我想创建一个方法来同时运行多个浏览器并在我需要的地方调用该方法。下面是我的代码..问题是当我从另一个类/方法调用它时,它只运行一个作为参数传递的浏览器。请指导我哪里错了

    public class CommonMethods {
    WebDriver driver;

    @BeforeTest
    @Parameters("browser")
    public void beforeTest(String browser)throws Exception{

        if(browser.equalsIgnoreCase("firefox")) {

            driver = new FirefoxDriver();
            System.out.println("1");
    }

        if(browser.equalsIgnoreCase("IE")) {
            System.setProperty("webdriver.ie.driver", "resource\\IEDriverServer.exe");
            driver = new InternetExplorerDriver();
            System.out.println("2");
        }

        if(browser.equalsIgnoreCase("chrome")){
            System.setProperty("webdriver.chrome.driver","resource\\chromedriver.exe");
            // To remove message "You are using an unsupported command-line flag: --ignore-certificate-errors.
            // Stability and security will suffer."
            // Add an argument 'test-type'
            ChromeOptions options = new ChromeOptions();
            options.addArguments("test-type");
            driver = new ChromeDriver(options);
            System.out.println("3");
    }
    }


}

这是testng.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite" parallel="tests">
 <test name="FirefoxTest">
 <parameter name="browser" value="firefox"/>
 <classes>
     <class name="mycompqa.helper.Calling"/>
  <class name="mycompqa.helper.CommonMethods"/>
 </classes>
 </test> <!-- Test -->

<test name="ChromeTest">
<parameter name="browser" value="chrome"/>
<classes>
    <class name="mycompqa.helper.Calling"/>
  <class name="mycompqa.helper.CommonMethods"/>      
 </classes>
 </test>

<test name="IETest">
<parameter name="browser" value="IE"/>
<classes>
    <class name="mycompqa.helper.Calling"/>
  <class name="mycompqa.helper.CommonMethods"/>
</classes>
</test>

 </suite> <!-- Suite -->

这就是我的称呼方式

    package mycompqa.helper;

     import org.openqa.selenium.WebDriver;
      import org.testng.annotations.Test;

       public class Calling {

         CommonMethods com=new CommonMethods();

    @Test
    public void run() throws Exception{
        com.beforeTest("firefox");
        WebDriver driver=com.driver;
        driver.get("http://www.snapdeal.com");

}
}

现在这个代码只在Firefox浏览器中运行,但我想要的是所有浏览器都应该同时运行。当我将firefox作为参数传递时,只有那个浏览器才能运行。我应该怎样做才能同时执行所有浏览器?

您能提供一些链接,我可以在这些主题上学到更多( 除了selenium.org和testng.org)?

2 个答案:

答案 0 :(得分:0)

首先,您应该使用testng xml来运行测试。但是如果你想要这个设置你可以创建CommonMethods类的线程,然后你可以创建它的多个实例并使用不同的浏览器作为参数调用。

但我会以这种方式做到这一点

class a {

Private String Browser;
WebDriver c;
@test
@Parameters("browser")
public void driver(String Browser)
//create instance of Webdriver


  //use the driver

}
}

并拥有像这样的testng xml

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite" parallel="tests">
 <test name="FirefoxTest">
 <parameter name="browser" value="firefox"/>
 <classes>
     <class name="a"/>
 </classes>
 </test> <!-- Test -->
<test name="ChromeTest">
 <parameter name="browser" value="Chrome"/>
 <classes>
     <class name="a"/>
 </classes>
 </test> <!-- Test -->

答案 1 :(得分:0)

您可以使用selenium网格在所有浏览器上同时运行脚本。为此,您只需在编辑器中添加Selenium Standalone Server jar。你可以从下面提到的链接下载jar: http://www.seleniumhq.org/download/

查看此视频,了解网格的工作原理。 https://www.youtube.com/watch?v=kAvzKA9wsbo

如果您仍然面临问题,请告诉我。