2011-11-04 107 views
1

所以我使用了selenium API,并且成功地使用它来测试Firefox和Chrome。但是我需要怎么做才能在两个浏览器上自动运行相同的单元测试。我试图把WebDrivers放在一个ArrayList<WebDriver> drivers对象中,但如果我这样做的话测试不能正常运行。目前在ArrayList中只有一个驱动程序,但它仍然不能用于一个条目。这里有一些代码...运行JUnit测试在使用Selenium的不同浏览器上“自动”

package testsuites; 

import static org.junit.Assert.assertEquals; 
import static org.junit.Assert.assertTrue; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.concurrent.TimeUnit; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class BingTests extends BaseTestSuite{ 
//private WebDriver fireFoxDriver; 
private WebDriver chromeDriver; 
private WebDriver fireFoxDriver; 
private ArrayList<WebDriver> drivers; 

@Before 
public void setUp() throws Exception { 
    fireFoxDriver = new FirefoxDriver(); 
    fireFoxDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    drivers.add(fireFoxDriver); 
} 

@Test 
public void testGoogle(){ 
    for(WebDriver driver: drivers){ 
     driver.get("http://www.bing.com"); 
     driver.findElement(By.id("sb_form_q")).clear(); 
     driver.findElement(By.id("sb_form_q")).sendKeys("Selenium IDE"); 
     driver.findElement(By.id("sb_form_go")).click(); 
      driver.findElement(By.xpath("//ul[@id='wg0']/li[2]/div/div/h3/a/strong")).click(); 
     WebElement elem = driver.findElement(By.id("mainContent")); 
     assertTrue(elem.getText().contains("Selenium News")); 
    } 
} 

@Test 
public void isWikiContentCorrect(){ 
    for(WebDriver driver: drivers){ 
     driver.get("http://www.bing.com"); 
     driver.findElement(By.id("sb_form_q")).clear(); 
     driver.findElement(By.id("sb_form_q")).sendKeys("Saturn"); 
     driver.findElement(By.id("sb_form_go")).click(); 
     driver.findElement(By.linkText("Saturn - Wikipedia, the free encyclopedia")).click(); 
     driver.findElement(By.cssSelector("li.toclevel-1.tocsection-9 > a > span.toctext")).click(); 
     assertTrue(driver.getPageSource().contains("53 of which")); 
    } 
} 

@Test 
public void isWikiTitleCorrect(){ 
    for(WebDriver driver: drivers){ 
     driver.get("http://www.bing.com"); 
     driver.findElement(By.id("sb_form_q")).clear(); 
     driver.findElement(By.id("sb_form_q")).sendKeys("Saturn"); 
     driver.findElement(By.id("sb_form_go")).click(); 
     driver.findElement(By.linkText("Saturn - Wikipedia, the free encyclopedia")).click(); 
     assertEquals("Saturn - Wikipedia, the free encyclopedia", driver.getTitle()); 
    } 
} 

@Test 
public void testDropDownWithSelenium(){ 
    for(WebDriver driver: drivers){ 
     driver.get("http://www.bing.com"); 
     driver.findElement(By.id("sb_form_q")).clear(); 
     driver.findElement(By.id("sb_form_q")).sendKeys("Neptunes moon"); 
     driver.findElement(By.partialLinkText("moons and rings")).click(); 
     driver.findElement(By.linkText("Neptune (planet) :: Neptune's moons  and rings -- Britannica Online ...")).click(); 
     List<WebElement> elems = driver.findElements(By.tagName("Input")); 
     for(WebElement elem: elems){ 
      System.out.println(elem.getText()); 
     } 
    } 
} 

@After 
public void tearDown() throws Exception { 
    for(WebDriver driver: drivers){ 
     driver.close(); 
    } 
} 
} 

回答

2

您使用了错误的练习。此实现需要在测试方法中不必要的循环代码。随着测试案例数量的增加,这种做法变得更加痛苦(考虑100个测试用例)。

使用Selenium Grid或使用QAF formerly ISFW。在Qmetry自动化框架(QAF)中,您可以将其设置为配置文件以针对不同的浏览器运行。 例如

<suite name="Test Automation" verbose="0" parallel="tests"> 

    <test name="Test on FF"> 
     <parameter name="browser" value="InternetExplorerWebDriver" /> 
    ... 
    </test> 
    <test name="Test on IE"> 
     <parameter name="browser" value="firefoxWebDriver" /> 
    ... 
    </test> 
</suit> 
+0

感谢您的帮助。我决定使用TestNG,因为Eclipse有一个很好的插件,但它看起来与ISFW基本相同。 –

+0

是ISFW使用testNG作为测试框架并提供硒特定需求,因此可以利用tesNG的所有功能,包括eclipse插件 – user861594

1

JUNIT硒在不同浏览器

启动不同的浏览器例如:铬&火狐自动

public class SimpleJunit { 
    private static WebDriver driver; 
    public static int random = 0; 
    private String baseURL; 
    // @BeforeClass : Executes only once for the Test-Class. 
    @BeforeClass public static void setting_SystemProperties(){ 
     System.out.println("System Properties seting Key value."); 

     System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); // Chrome Driver Location. 
    } 
    // @Before  : To execute once before ever Test. 
    @Before public void test_Setup(){  
     System.out.println("Launching Browser"); 
     if (random == 0) { 
      driver = new ChromeDriver(); // Creates new SessionID & opens the Browser. 
     }else { 
      driver = new FirefoxDriver(); 
     } 

     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

     System.out.println("Session ID : " + ((RemoteWebDriver) driver).getSessionId()); 
    } 
    // @Test  : Testing senarios. 
    @Test public void robot_ScreenShot() throws AWTException, IOException{ 
     System.out.println("Robot Tset Screen Shot."); 
     baseURL = "http://searchsoa.techtarget.com/definition/stickiness"; 
       Robot robot = new Robot(); // CTRL+T new tab in Browser.     

     driver.get(baseURL);   

       Toolkit toolkit = Toolkit.getDefaultToolkit(); 
       int width = (int) toolkit.getScreenSize().getWidth(); 
       int height = (int) toolkit.getScreenSize().getHeight();     

       Rectangle area = new Rectangle(0, 0, width, height); 
       BufferedImage bufferedImage = robot.createScreenCapture(area); 
       ImageIO.write(bufferedImage, "png", new File("D:\\Screenshots\\JUNIT-Robot.png")); 
       random += 1; 
    } 
    @Test public void selenium_ScreenShot() throws IOException { 
     baseURL = "http://www.w3schools.com/css/css_positioning.asp"; 
     driver.get(baseURL); 
     System.out.println("Selenium Screen shot."); 
     File screenshotFile = ((RemoteWebDriver) driver).getScreenshotAs(OutputType.FILE);       
     FileUtils.copyFile(screenshotFile, new File("D:\\Screenshots\\JUNIT-Selenium.jpg")); 
     random += 1; 
    } 
    // @After  : To execute once after ever Test. 
    @After public void test_Cleaning(){ 
     System.out.println("Closing Browser"); 
     baseURL = null;  
     driver.close(); // Removing SessionID & Close the Browser.  
/*if you are not using driver.quit(). then JUNIT-Test will not terminate untill you end chromedriver.exe process 
    in Task-Manager. use CTRL+SHIFT+ESC to open TaskManager then goto processes-view find chromedriver.exe and 
    then end the process manually. */ 
     driver.quit(); // Ends the Process by removing chromedriver.exe process from Task-Manager. 
    } 
    // @AfterClass : Executes only once before Terminating the Test-Class. 
    @AfterClass public static void clearing_SystemProperties(){ 
     System.out.println("System Property Removing Key value.");    
     System.clearProperty("webdriver.chrome.driver"); 
    } 
} 

JUnit Tests execution order.

相关问题