我不想在Java中重复代码selenium

时间:2016-10-04 20:07:41

标签: java selenium selenium-webdriver

我不想在每个使用TestNG的测试用例中重复以下代码。请提出建议。 我将propfis作为全局变量,在openBrowser()中初始化,然后在其他方法中使用,但我在道具上得到NullPointerExeption。如果我添加下面的行,那么我不明白。

我只想加载属性文件一次并重新使用它。

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();       
}       
}

1 个答案:

答案 0 :(得分: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();
 }
}