2016-10-04 106 views
0

我不想在每個測試用例中使用TestNG重複以下代碼。請給個建議。 我一直propfis爲全局變量,初始化它們openBrowser(),然後在其他方法使用,但我得到NullPointerExeption上的道具。如果我添加下面的行,那麼我不明白。我不想在Java中重複代碼硒

我只想加載一次屬性文件並重新使用它。

Properties prop = new Properties(); 
FileInputStream fis = new 
FileInputStream("C:\\Users\\xxxxx\\URL.properties"); 
prop.load(fis); 

代碼:

public class CallUrl { 
WebDriver driver; 
Properties prop ; 
FileInputStream fis;   
@BeforeTest 
public void openBrowser() throws IOException 
{ 
    Properties prop = new Properties(); 
    FileInputStream fis = new FileInputStream("C:\\Users\\xxxx\\URL.properties"); 
    prop.load(fis);    System.setProperty("webdriver.chrome.driver","C:\\Users\\xxxx\\chromedriver.exe"); 
     String browserType = prop.getProperty("Browser");  
    if (browserType.equals("Chrome")) 
     {    System.setProperty("webdriver.chrome.driver","C:\\Users\\Ashish\\Documents\\Selenium\\drivers\\chromedriver_win32\\chromedriver.exe"); 
      driver = new ChromeDriver(options); 
     } 
    else if(browserType.equals("FireFox")) 
    { 
     driver = new FirefoxDriver(); 
    }   
} 

@Test 
public void openURL() throws IOException 
{ 
    Properties prop = new Properties(); 
    FileInputStream fis = new FileInputStream("C:\\Users\\xxxxx\\URL.properties"); 
    prop.load(fis); 
     driver.get(prop.getProperty("URL")); 
     WebDriverWait myDynamicElement = new WebDriverWait(driver,30);   myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='userName']"))); 
} 

@Test(dependsOnMethods={"openURL"}) 
public void loginToTours() throws InterruptedException, IOException 
{ 
    Properties prop = new Properties(); 
    FileInputStream fis = new FileInputStream("C:\\Users\\xxxxx\\URL.properties"); 
    prop.load(fis);   driver.findElement(By.name("userName")).sendKeys(prop.getProperty("login"));  driver.findElement(By.name("password")).sendKeys(prop.getProperty("password")); 
    driver.findElement(By.name("login")).click();  
}  
} 
+0

抽象基類? – chrylis

回答

1

您可以將它們移到BeforeClass將在類的所有測試之前只執行一次。我個人不喜歡啓動瀏覽器的測試的想法,直接處理頁面元素。我建議你實現頁面對象模型 - 檢查here

public class CallUrl { 
WebDriver driver; 
Properties prop; 

@BeforeClass 
public void loadProps(){ 
    prop = new Properties(); 
    FileInputStream fis = new FileInputStream("C:\\Users\\xxxx\\URL.properties"); 
    prop.load(fis); 
} 


@BeforeTest 
public void openBrowser() throws IOException { 
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\xxxx\\chromedriver.exe"); 
    String browserType = prop.getProperty("Browser"); 
    if (browserType.equals("Chrome")) { 
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\Ashish\\Documents\\Selenium\\drivers\\chromedriver_win32\\chromedriver.exe"); 
    driver = new ChromeDriver(options); 
    } else if (browserType.equals("FireFox")) { 
    driver = new FirefoxDriver(); 
    } 
} 

@Test 
public void openURL() throws IOException { 
    driver.get(prop.getProperty("URL")); 
    WebDriverWait myDynamicElement = new WebDriverWait(driver, 30); 
    myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='userName']"))); 
} 

@Test(dependsOnMethods = { 
    "openURL" 
}) 
public void loginToTours() throws InterruptedException, IOException { 
    driver.findElement(By.name("userName")).sendKeys(prop.getProperty("login")); 
    driver.findElement(By.name("password")).sendKeys(prop.getProperty("password")); 
    driver.findElement(By.name("login")).click(); 
} 
} 
+0

。它工作,但是當我使用BeforeTest方法時,我得到了nullpointerException,而不是BeforeClass..why? BeforeClass有什麼不同? – Tokci

+0

問題出在'Properties prop = new Properties();' - 你爲其他方法不可用的方法創建一個局部變量。 – vins