2013-06-03 2 views
4

Я довольно новичок в Selenium WebDriver и JUnit, я тестирую веб-приложение и задавался вопросом, правильно ли это в моем классе, в Junit, для тестирования пользовательского интерфейса?
Как я видел случаи, когда люди использовали композицию.Дизайн Selenium WebDriver и Junit Class

Любые советы будут оценены

класса Java

public class OverviewPage { 

private WebDriver driver; 
private String URL = "http://www.google.com"; 
public String searchQuery = "BBC"; 

OverviewPage(WebDriver driver){ 
    this.driver = driver; 
    driver.get(URL); 
    if(!"Login".equals(driver.getTitle())){ 
     throw new IllegalStateException("Wrong site"); 

    } 
} 

By searchBox = By.id("siteSearchField"); 
By submitSearch = By.cssSelector("button.btn.searchIco"); 

public OverviewPage searchBox(String findADealer){ 
    driver.findElement(searchBox).sendKeys(findADealer); 
     return this; 
} 

public OverviewPage searchBoxDisplayed(){ 
    driver.findElement(searchBox); 
    return this; 
} 



public FindADealerPage searchResults(){ 
    driver.findElement(searchBox).sendKeys(searchQuery); 
    driver.findElement(submitSearch).click(); 
    String search = driver.getPageSource(); 
    boolean searchResults = search.contains(searchQuery); 
    return new FindADealerPage(driver); 
} 

}

Junit

public class OverviewPageTest { 

private WebDriver driver; 
public String searchQuery = "find a dealer"; 

By searchBox = By.id("siteSearchField"); 
By submitSearch = By.cssSelector("button.btn.searchIco"); 

@Before 
public void setUp(){ 

driver = new HtmlUnitDriver(); 
driver.get("http://www.google.com"); 
} 



@After 
public void tearDown(){ 
    driver.quit(); 
} 

@Test 
public void checkTitle(){ 
    Assert.assertEquals("product edit", driver.getTitle()); 
} 

@Test 
public void checkSearchBoxExists(){ 
    boolean searchBoxes = driver.findElement(searchBox).isDisplayed(); 
    Assert.assertTrue(searchBoxes); 
} 

@Test 
public void searchResults(){ 
    driver.findElement(searchBox).sendKeys(searchQuery); 
    driver.findElement(submitSearch).click(); 
    String search = driver.getPageSource(); 
    boolean searchResults = search.contains(searchQuery); 
    Assert.assertTrue(searchResults); 
} 

}

ответ

8

Ваш класс Java OverviewPage предлагает мне, что вы хотите использовать модель PageObject.

Если вы хотите следовать примеру Google (https://code.google.com/p/selenium/wiki/PageObjects), вы можете поместить все поля и методы, относящиеся к определенной странице в PageObject, а не в TestClass.

Например, в вашем TestClass, экземпляр PageObject:

OverviewPage page = new OverViewPage(driver); 

и на протяжении всего TestCalss заменить такие вещи, как driver.get("http://www.google.com"); с driver.get(page.URL);

В основном то, что она сводится к тому, - вы не должны иметь все в кавычках в вашем TestClass. Преимущество этого шаблона заключается в том, что когда у вас есть несколько тестов, относящихся к одному и тому же полю в PageObject, тогда, когда вам нужно обновить это поле, вы можете сделать это легко в одном месте, а не рефакторинг нескольких строк дублированного кода во время ваших тестов.

Кроме того, для любого теста не должно быть более двух строк - вызов метода и утверждение.

Таким образом, используя тестовые SearchResults() в качестве примера, можно переместить следующие строки в метод внутри объекта страницы:

driver.findElement(searchBox).sendKeys(searchQuery); 
driver.findElement(submitSearch).click(); 
String search = driver.getPageSource(); 
boolean searchResults = search.contains(searchQuery); 
return searchResults; // added this one... 

И ваш тест становится:

@Test 
public void searchResults(){ 
    boolean searchResults = page.searchResults(); 
    Assert.assertTrue(searchResults); 
} 

Это мой интерпретация. Надеюсь, поможет!

Смежные вопросы