2016-10-04 21 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

.Itは働いていましたが、BeforeTestメソッドを使用したとき、私はnullpointerExceptionを取得し、BeforeClassではありません。なぜですか? BeforeClassについての違いは何ですか? – Tokci

+0

問題は 'Properties prop = new Properties();'でした。他のメソッドでは利用できないメソッドのローカル変数を作成しました。 – vins

関連する問題