Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium WebDriver和Junit类设计_Java_Junit_Automation_Automated Tests_Selenium Webdriver - Fatal编程技术网

Java Selenium WebDriver和Junit类设计

Java Selenium WebDriver和Junit类设计,java,junit,automation,automated-tests,selenium-webdriver,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"; O

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

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

}

您的Java类概览页面向我建议您希望使用PageObject模型

如果您想遵循Google的示例(),可以将与特定页面相关的所有字段和方法放在PageObject中,而不是TestClass中

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

OverviewPage page = new OverViewPage(driver);
在整个测试过程中,替换
driver.get(“http://www.google.com");带有
驱动程序.get(page.URL)

基本上,它归结为-在TestClass中不应该有任何引号。这种模式的好处是,当您有多个测试引用PageObject中的同一字段时,然后当您需要更新该字段时,您可以在一个位置轻松地进行更新,而不是在整个测试中重构多行重复代码

而且,任何给定的测试都不需要超过两行——一行是方法调用,一行是断言

因此,以test 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);
}
这是我的解释。希望有帮助