Selenium IDE / Builder可以在许多页面上运行相同的测试用例吗?

时间:2015-05-27 22:08:50

标签: javascript selenium jenkins automated-tests selenium-ide

有没有办法在很多页面上运行相同的Selenium测试用例,而没有专门定义页面列表?

比如说,我有一个像这样定义的UIMap页面集:

var map = new UIMap();
map.addPageset({
    name: 'pages',
    description: 'all pages',
    pathRegexp: '^thisistheroot/$'
});

在页面集中,我为测试脚本定义了所有要在页面集中的每个页面上测试的元素。 所有这些都添加到我的核心扩展中。

我能在整个页面集上运行测试用例吗?我怎么能这样做?

我更多地研究了这个问题。詹金斯有没有办法实现这一点? https://jenkins-ci.org/

编辑:

我试图避免使用selenium webdriver,但是如果可以像在UIMap中那样获得链接,那么这可能也会指向正确的方向。我会尝试使用单个测试用例迭代链接,这可以很容易地在java中完成。顺便说一下,我正在使用java for webdriver。

感谢。

2 个答案:

答案 0 :(得分:3)

简单的答案是" no"但是Selenium WebDriver是确保找到页面链接并迭代它们的最佳选择之一。您的 UIMapping 的概念非常类似于PageFactory,您可以将所有页面元素映射到不同的类中,以使责任分离,从而使调试和重构更加容易。我使用了PageFactory概念here

现在回到您的问题,您可以轻松找到页面中显示的链接列表。在这种情况下,您只需要仔细编写选择器。然后,您可以轻松地遍历链接并来回等等。

Google上的概念验证

<强>的BasePage

package google;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.util.NoSuchElementException;

/**
 * Defines the generic methods/functions for PageObjects.
 */
public class BaseClass {

    protected WebDriver driver;

    /**
     * @param _driver
     * @param byKnownElement
     */
    public BaseClass(WebDriver _driver, By byKnownElement) {

        //assigning driver instance globally.
        driver = _driver;
        this.correctPageLoadedCheck(byKnownElement);

        /* Instantiating all elements since this is super class
        and inherited by each and every page object */
        PageFactory.initElements(driver, this);
    }

    /**
     * Verifies correct page was returned.
     *
     * @param by
     */
    private void correctPageLoadedCheck(By by) {

        try {

            driver.findElement(by).isDisplayed();

        } catch (NoSuchElementException ex) {

            throw ex;
        }
    }
}

PageObject继承了BasePage

package google;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

import java.util.List;

/**
 * Created by Saifur on 5/30/2015.
 */
public class GoogleLandingPage extends BaseClass {


    private static final By byKnownElement = By.xpath("//a[text()='Sign in']");

    /**
     * @param _driver
     */

    public GoogleLandingPage(WebDriver _driver) {
        super(_driver, byKnownElement);
    }

    //This should find all the links of the page
    //You need to write the selector such a way
    // so that it will grab all intended links.
    @FindBy(how = How.CSS,using = ".gb_e.gb_0c.gb_r.gb_Zc.gb_3c.gb_oa>div:first-child a")
    public List<WebElement> ListOfLinks;
}

<强> BaseTest

package tests;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

public class BaseTest {


    public WebDriver driver;
    String url = "https://www.google.com/";


    @BeforeClass
    public void SetUpTests() {

        driver = new FirefoxDriver();
        //Navigate to url
        driver.navigate().to(url);
        //Maximize the browser window
        driver.manage().window().maximize();
    }

    @AfterClass
    public void CleanUpDriver() throws Exception {
        try {

            driver.quit();

        }catch (Exception ex){

            throw ex;
        }
    }
} 

链接迭代器测试继承BaseTest

package tests;

import google.GoogleLandingPage;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;

import java.util.List;

/**
 * Created by Saifur on 5/30/2015.
 */
public class LinksIteratorTests extends BaseTest {

    @Test
    public void IterateOverLinks(){
        GoogleLandingPage google = new GoogleLandingPage(driver);

        List<WebElement> elementList = google.ListOfLinks;

        for (int i=0;i<elementList.size(); i++){
            elementList.get(i).click();
            //possibly do something else to go back to the previous page
            driver.navigate().back();
        }
    }
}
  

注意:我正在使用TestNG来维护测试,请注意延迟加载页面,如果需要,您可能需要添加一些明确的等待

答案 1 :(得分:2)

实际上,针对1个特定页面(实际基本网址)运行IDE测试很简单:java -jar selenium-server.jar -htmlSuite "*firefox" "http://baseURL.com" "mytestsuite.html" "results.html"

所以你需要做的是使用jenkins(或任何bash / batch脚本)多次运行该命令,并将基本网址设置为&#34; http://baseURL.com/page1&#34;,&#34; http://baseURL.com/page2&#34;等等

这只会让您获得要测试的静态页面列表。如果你想要一个动态列表,你还必须&#34;抓取&#34;页面,您可以在类似的批处理/ bash脚本中执行此操作,以获取要测试的页面列表。

在这种情况下,您最好在selenium IDE之外进行投资并切换到webdriver,以便您拥有更多的循环和流量控制功能。