所以我正在使用selenium API,并成功使用它来测试firefox和chrome。但是我需要做什么才能自动在两个浏览器上运行相同的单元测试。我已经尝试将WebDrivers放在一个ArrayList<WebDriver> drivers
对象中,但如果我这样做,测试就无法正常运行。目前,ArrayList中只有一个驱动程序,但它仍然不能只使用一个条目。这是一些代码......
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();
}
}
}
答案 0 :(得分:2)
您采用了错误的做法。此实现需要在测试方法中使用不必要的循环代码。随着测试用例数量的增加,这种做法变得更加痛苦(想想100多个测试用例)。
使用Selenium Grid或使用QAF formerly ISFW。在Qmetry Automation 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>
答案 1 :(得分:1)
在不同浏览器上使用Selenium进行JUNIT
推出不同的浏览器:Chrome&amp; 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");
}
}