gpt4 book ai didi

java - Selenium WebDriver 和 Junit 类设计

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:09 27 4
gpt4 key购买 nike

我是 Selenium WebDriver 和 JUnit 的新手,我正在测试一个网络应用程序,想知道我在 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);
}

联合

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

最佳答案

您的 Java 类 OverviewPage 向我建议您想要使用 PageObject 模型。

如果您想效仿 Google 的示例 (https://code.google.com/p/selenium/wiki/PageObjects),您可以将与特定页面相关的所有字段和方法放在 PageObject 而不是 TestClass 中。

例如,在您的 TestClass 中,实例化 PageObject:

OverviewPage page = new OverViewPage(driver);

在整个 TestCals 中,将 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);
}

这是我的解释。希望对您有所帮助!

关于java - Selenium WebDriver 和 Junit 类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16893229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com