use*_*703 4 java junit automation automated-tests selenium-webdriver
我对Selenium WebDriver和JUnit相当新,我正在测试一个Web应用程序,并且想知道我在Junit中的类设计是否正确用于测试UI?
正如我所见,人们使用构图的地方.
任何建议将不胜感激
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);
}
Run Code Online (Sandbox Code Playgroud)
}
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);
}
Run Code Online (Sandbox Code Playgroud)
}
您的Java类OverviewPage向我建议您要使用PageObject模型.
如果您想关注Google的示例(https://code.google.com/p/selenium/wiki/PageObjects),您可以将所有与特定页面相关的字段和方法放在PageObject而不是TestClass中.
例如,在TestClass中,实例化PageObject:
OverviewPage page = new OverViewPage(driver);
Run Code Online (Sandbox Code Playgroud)
并在整个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...
Run Code Online (Sandbox Code Playgroud)
你的测试成了:
@Test
public void searchResults(){
boolean searchResults = page.searchResults();
Assert.assertTrue(searchResults);
}
Run Code Online (Sandbox Code Playgroud)
这是我的解释.希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
7316 次 |
| 最近记录: |