2011-11-04 2 views
1

Итак, я использую API selenium, и успешно его использую для тестирования на 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 из тестовых случаев).

Используйте селеновую решетку или используйте QAF formerly ISFW. В Qmet Framework (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 с селеном на различных браузерах

запускающих различные браузеры ех: Chrome & FireFox автоматически

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.

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