我使用Webdriver + TestNG。我创建了一个类,您可以使用您选择的浏览器运行任何测试,只需使用下面的方法,在其中输入要运行的浏览器和要运行的测试作为变量。现在我正试图从属性文件中输入我的"浏览器"变量和"测试"变量。当我运行它时,我只得到一个Pass,但什么也没有发生。如果我手动输入变量,它工作得很好。为什么它不会从属性文件中获取值?如果我执行print,它会打印出正确的值…
属性文件的内容:
browser=" browser GOES HERE"
test=" test GOES HERE"
下面是我运行测试的方法:
@Test
public void runTest() throws IOException {
Properties prop = new Properties();
prop.load(new FileInputStream(
"path\test.properties"));
localBrowser(prop.getProperty("browser"));
masterTest(driver, prop.getProperty("test"));
}
下面是我测试的一个沙盒示例:
如果我自己放入变量,浏览器将打开并执行测试。如果我使用属性加载器,它只会打印变量,但不会运行测试。下面是一个沙盒示例,您可以尝试一下。
Package Structure:
src/测试/java
——SandboxTest
src/测试/资源
——测试。
属性文件示例:
firefox浏览器 =
测试= test1
类示例:
公共类SandboxTest {
private WebDriver driver;
InputStream input = null;
Properties prop = new Properties();
@Test
public void runTest() throws FileNotFoundException, IOException {
input = new FileInputStream(
(new File(
"C:INSERT_PATH_HERE\test.properties")));
prop.load(input);
//This doesnt run the test
System.out.println(prop.getProperty("browser"));
System.out.println(prop.getProperty("test"));
localBrowser(prop.getProperty("browser"));
masterTest(driver, prop.getProperty("test"));
/*
* This works
* localBrowser("firefox");
* masterTest(driver, "test1");
*/
}
public void localBrowser(String browser) {
if (browser == "firefox") {
driver = new FirefoxDriver();
} else if (browser == "chrome") {
System.setProperty("webdriver.chrome.driver",
"C:\INSERT_PATH_HERE\chromedriver.exe");
driver = new ChromeDriver();
} else if (browser == "ie") {
System.setProperty("webdriver.ie.driver",
"C:\INSERT_PATH_HERE\IEDriverServer.exe");
driver = new InternetExplorerDriver(caps);
}
}
public void masterTest(WebDriver driver, String test) {
if (test == "test1") {
Test1(driver);
} else if (test == "test2") {
Test2(driver);
}
}
// *********************************TESTS*****************************************************
public void Test1(WebDriver driver) {
driver.get("http://www.marca.com/en/");
driver.findElement(By.linkText("Barcelona")).click();
}
public void Test2(WebDriver driver) {
driver.get("http://www.marca.com");
driver.findElement(By.linkText("Fútbol")).click();
}
}
嗯…我真的不知道你在做什么,但如果它不工作,所以可能它没有正确加载属性文件。
试试这个
Resource resource = new ClassPathResource("/environment.properties");
properties = PropertiesLoaderUtils.loadProperties(resource);
告诉我是否可以,希望对你有帮助
编辑:以上是Spring的一部分,你可以使用
prop.load(new FileInputStream(new File("test.properties")));
- 请确保测试。在项目 的src文件夹下
问题不在属性文件中。问题在于你比较两个字符串
的方式当您执行browser == "firefox"
时,检查对象地址(referenec)当你比较对象类型时,你需要使用equals例如browser.equals("firefox")
,它将以这种方式工作。
因为当你把值放入self时,它会检查引用,结果是一样的。一旦你从属性中获取这是两个不同的对象但它们都是相等的所以它只适用于Equals
您应该做的是将该属性放入test .xml文件中,然后从那里读取该属性。然后,如果您需要不同的属性文件,您可以创建多个testing.xml文件,并在执行测试时将TestNG. xml文件作为参数传递给TestNG。
在上面我在超链接中引用的项目中,你可以看到我引用的属性是这样的:
@BeforeClass
public void setUp( ITestContext context ) {
suiteParams = context.getSuite().getXmlSuite().getAllParameters();
String browser = suiteParams.get( "browser" );
String sauceUser = suiteParams.get( "sauceUser" );
String sauceKey = suiteParams.get( "sauceKey" )
....
如果你必须使用一个属性文件,那么我会改变你的代码和做不同的。类似这样的内容(假设使用TestNG):
protected WebDriver driver;
protected String browser;
@BeforeTest
public void setUp() {
Properties prop = new Properties();
prop.load( new FileInputStream("path/test.properties") );
browser = prop.getProperty("browser");
if ( browser.equals("firefox") {
driver = new FirefoxDriver();
} else {
driver = null; // bad choice
}
}
@Test
public void runTest() throws IOException {
driver.navigateTo( url);
// do stuff
Assert.assertTrue( 1 == 1 );
}
@AfterTest
public void cleanUp() {
driver.quit();
}