我正在使用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();
}
}
答案 0 :(得分:1)
嗯..我真的不确定你在做什么,但是如果它没有工作那么可能它没有正确加载属性文件。
尝试这个
Resource resource = new ClassPathResource("/environment.properties");
properties = PropertiesLoaderUtils.loadProperties(resource);
告诉我,如果没问题,希望有帮助
编辑:
以上是Spring的一部分, 你可以用
prop.load(new FileInputStream(new File("test.properties")));
编辑:
问题不在属性文件中..问题在于您比较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();
}