【发布时间】:2014-06-04 22:00:23
【问题描述】:
我正在使用 Webdriver + TestNG。我创建了一个类,您可以在其中使用您选择的浏览器运行任何测试,只需使用下面的方法,您可以在其中输入要运行的浏览器以及要运行的测试作为变量。现在我正在尝试从属性文件中提供我的“浏览器”变量和“测试”变量。当我运行它时,我只是获得了通行证,但没有任何反应。如果我手动输入变量,它工作正常。为什么它不会从属性文件中获取值?如果我进行打印 - 它会打印正确的值...
这是属性文件的内容:
browser="浏览器到这里"
test="测试到这里"
这是我运行测试的方法:
@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/test/java
--沙盒测试
-src/test/资源
--test.properties
属性文件示例:
浏览器=火狐
测试=测试1
类示例:
公共类 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();
}
}
【问题讨论】:
-
你是说如果你打印这个 prop.getProperty("browser") 它会打印值但不会传递给函数??
-
正确@Aviad。如果我将浏览器属性设置为 firefox (browser=firefox) 并执行 System.out.println(prop.getProperty("browser"));我会得到 Firefox,但是当我做 localBrowser(prop.getProperty("browser"));我什么都得不到。如果我在这样的方法中传递浏览器,它可以工作 localBrowser("firefox")。
-
如果我理解正确,你可以在属性文件中设置 browser=firefox 并且它可以工作。所以我不明白,因为你仍然有问题 :) 你能告诉我你的结构吗项目也,文件加载正确?
-
@Aviad 我的意思是它不能将它作为变量传递,但如果我执行 sysout,我会从属性文件中看到该变量。这有意义吗?
-
@seleniumRookie - 执行 System.out.println(prop.getProperty("SDf")) 或执行 localBrowser(prop.getProperty("SDf") 时行为不会有差异)。问题似乎出在其他地方。输入 localBrowser 的代码。在 localBrowser 中打印 browser 的值以及在调用之前并共享输出