【发布时间】:2015-11-26 21:52:00
【问题描述】:
现在,我正在尝试进行我的第一个测试,该测试将并行测试浏览器 Chrome、Firefox、IE 和 Safari。但是我得到的以下错误是:
配置失败:@BeforeMethod beforeMethod org.testng.TestNGException: @Configuration 在方法 beforeMethod 上需要参数“browser”,但>尚未标记为 @Optional 或已定义
我正在使用带有 JAVA 语言的 Selenium、TestNG 和 Maven。 XML 测试套件文件和 java 文件在目录中的同一个文件夹中。我在网上找到的测试套件 XML 文件如下(类名值设置为正确的包和类名):
<?xml version="1.0" encoding="UTF-8"?>
<DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="2" parallel="tests">
<test name="ChromeTest">
<parameter name="browser" value="chrome" />
<classes>
<class name="com.sqa.ts.multiBrowser.BrowserTest">
</class>
</classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="firefox" />
<classes>
<class name="com.sqa.ts.multiBrowser.BrowserTest">
</class>
</classes>
</test>
<test name="IETest">
<parameter name="browser" value="ie" />
<classes>
<class name="com.sqa.ts.multiBrowser.BrowserTest">
</class>
</classes>
</test>
<test name="SafariTest">
<parameter name="browser" value="safari" />
<classes>
<class name="com.sqa.ts.multiBrowser.BrowserTest">
</class>
</classes>
</test>
</suite>
下面是我打开浏览器以确保它能够运行并通过的代码:
package com.sqa.ts.multiBrowser;
import java.net.MalformedURLException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class BrowserTest {
private WebDriver driver;
@Test
public void testCaseOne() {
driver.get("http://www.google.com");
driver.close();
}
@BeforeMethod
@Parameters("browser")
public void beforeMethod(String browser) throws MalformedURLException {
if (browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver", "C:/Users/Trevor/workspace/BrowserTest/drivers/chromedriver.exe");
driver = new ChromeDriver();
} else if (browser.equalsIgnoreCase("firefox")) {
driver = new FirefoxDriver();
} else if (browser.equalsIgnoreCase("ie")) {
System.setProperty("webdriver.ie.driver", "C:/Users/Trevor/workspace/BrowserTest/drivers/IEDriverServer.exe");
driver = new InternetExplorerDriver();
} else if (browser.equalsIgnoreCase("safari")) {
driver = new SafariDriver();
}
}
@AfterMethod
public void afterMethod() {
driver.quit();
}
}
如果有人可以让我了解导致此问题的原因,我将不胜感激。谢谢。
【问题讨论】:
-
将@Parameters("browser") 放在@BeforeMethod 之前是否可以解决您的问题?
-
以上两个文件似乎绝对没有问题,因为我复制了这些文件,因为它是在我的 maven 设置中。它同时调用 Chrome、IE、Firefox。
-
你是如何运行测试的?只有当您
Run as TestNG Test时,您才会收到上述错误。尝试以TestNG Suite或Maven Test运行它。 -
谢谢@mk08,运行TestNG Suite 让测试开始工作。 :)
-
@Tscott:太好了!检查下面Sighil的答案。如果你想让它通过 Maven 运行一切,你最终会需要它!
标签: java xml maven selenium testng