来自properties.file的变量未被传递 - TestNG - WebDriver测试

时间:2014-06-04 22:00:23

标签: java testng

我正在使用Webdriver + TestNG。我创建了一个类,您可以使用下面的方法使用您选择的浏览器运行任何测试,您可以在其中输入要运行的浏览器以及作为变量运行的测试。现在我正在尝试提供我的浏览器"变量和"测试"属性文件中的变量。当我运行它时,我只得到一个通行证但没有任何反应。如果我手动输入变量,它可以正常工作。为什么它不会从属性文件中获取值?如果我打印 - 它打印正确的值......

这是属性文件的内容:

浏览器="浏览器在这里"

test =" TEST GOES GOE"

以下是我运行测试的方法:

@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"));
        }

以下是我测试的沙箱示例:

如果我将变量放入自己,浏览器将打开并执行测试。如果我使用属性加载器,它将只打印变量但不会运行测试。这是一个沙盒示例,您可以尝试一下。

包装结构:

-src /测试/ JAVA
--SandboxTest
-src /测试/资源
--test.properties

属性文件示例:

浏览器=火狐
test = 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();
}

}

2 个答案:

答案 0 :(得分:1)

嗯..我真的不确定你在做什么,但是如果它没有工作那么可能它没有正确加载属性文件。

尝试这个

Resource resource = new ClassPathResource("/environment.properties");
properties = PropertiesLoaderUtils.loadProperties(resource);

告诉我,如果没问题,希望有帮助

编辑:

以上是Spring的一部分, 你可以用

prop.load(new FileInputStream(new File("test.properties")));
  • 请确保test.properties位于项目
  • 的src文件夹下

编辑:

问题不在属性文件中..问题在于您比较2个字符串的方式

执行browser == "firefox"时检查对象地址(referenec) 在比较对象类型时,需要使用Eqauls 例如browser.equals("firefox")它将以这种方式工作。

因为当你把价值放在自己的时候就会检查引用并且它是相同的......一旦你从属性获得这是两个不同的对象,但它们是#34;相等"所以它只适用于Equals

答案 1 :(得分:1)

你应该做的是放入the property in the testing.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();
}