1

我正在尝试使用 WebDriver 和 TFS 实现测试套件。

该测试套件包含 100 个测试,需要每晚在不同的浏览器(Chrome、FF 和 IE9)中启动。这意味着相同的 100 个测试将首先在 IE 中运行,然后在 FF 中,然后在 Chrome 中。

这些测试将通过 TFS 构建启动,由时间触发。

通常,我会在 中定义浏览器驱动程序[TestInitialize],但如果我在那里定义其中一个浏览器,我只能使用该浏览器启动 100 个测试。

我正在考虑使用同一项目的三个不同版本。这三个构建将与相同的代码相关联。所以我必须在代码之外定义一个变量,然后将该信息传递给代码,并在代码中进行切换并选择浏览器。

我一直在尝试在 testSettings.local 中定义该变量,但没有成功。我一直在尝试使用 testSettings.Local 的 SetupScript 引入该变量,但也没有成功。

有任何想法吗?

4

2 回答 2

0

我认为对于您的问题,您可以使用Selenium Grid and TestNG. 它用于在具有相同浏览器的同一台机器、具有不同浏览器的同一台机器上分发和并行测试,反之亦然。您不需要重复构建三次,您可以在 TestNG XML 文件中配置浏览器详细信息作为使用Data Provider概念。

有关如何使用网格的更多信息

于 2013-01-31T04:56:11.350 回答
0

我不能说用 C# 做事,但是 Java 足够相似,从下面的例子中你应该能够了解如何去做你需要做的事情。

我有一个如下所示的浏览器类:

public class Browser 
{
 public WebDriver getDriver(String driverName)
{
    WebDriver driver = null;
    if(driverName == "firefox")
    {
        driver = new FirefoxDriver();
    }
    else if(driverName == "chrome")
    {
        File chromeFile = new File ("C:/webdrivers/chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", chromeFile.getAbsolutePath());
        driver = new ChromeDriver();
    }
    else if(driverName == "ie")
    {
        File ieFile = new File("C:/webdrivers/IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver", ieFile.getAbsolutePath());
        driver = new InternetExplorerDriver();
    }
    else if(driverName == "iOS")
    {
        try 
        {
            driver = new RemoteWebDriver(new   URL("http://localhost:3001/wd/hub"), DesiredCapabilities.ipad());
        } catch (MalformedURLException e) 
        {

            e.printStackTrace();
        }
    }


    return driver;

}
}

然后我有一个调用浏览器类的方法。然后我的测试方法确定我将使用哪个浏览器,所以它看起来像这样:

public class EditMedications_Cancel 
{
Browser browser = new Browser();
Random rand = new Random();
HighlightElement highlight = new HighlightElement();
WebDriver driver;

private void cancelButton(String driverName)
{
    int min = 1; //minimum random row
    int max = 5; //maximum random row
    driver = browser.getDriver(driverName); //get the Browser
    int rowNum = (rand.nextInt(max - min + 1) + min); //Random row
    JavascriptExecutor js = (JavascriptExecutor)driver;

    //Open Browser, navigate to Patient Facing
    driver.manage().window().maximize();
    driver.get("http://someIP.com");
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

    //Get a random row from the table and click it
    WebElement randomRow = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum+"]/td"));
    randomRow.click();

    //Get Settings button and Click it
    int rowNum2 = (rowNum + 1);
    WebElement medicationName1 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li/h1"));
    WebElement dosage1 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li[2]/h3"));
    WebElement howMuch1= driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li[3]/h3")); 
    WebElement reason1 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li[4]/p"));
    WebElement settingsBtn = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/aside/div/button"));
    String medicationNameBefore = medicationName1.getText();
    String dosageBefore = dosage1.getText();
    String howMuchBefore = howMuch1.getText();
    String reasonBefore = reason1.getText();

    settingsBtn.click();

    //Click Edit Button
    WebElement editBtn = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/aside/div/ul/li/a"));
    editBtn.click();

    //Make Changes and click Cancel
    WebElement medicationName2 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/form/fieldset/h1"));
    Select dosage2 = new Select (driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/form/fieldset/label/select")));
    WebElement howMuch2 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/form/fieldset/label[2]/input"));
    WebElement reason2 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/form/fieldset/label[4]/input"));
    medicationName2.sendKeys("TEST TEST TEST");
    dosage2.selectByIndex(2);
    howMuch2.sendKeys("TEST TEST TEST");
    reason2.sendKeys("TEST TEST TEST");
    WebElement  cancelBtn = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/form/fieldset/div/button[2]"));
    cancelBtn.click();

    WebElement medicationName3 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li/h1"));
    WebElement dosage3 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li[2]/h3"));
    WebElement howMuch3= driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li[3]/h3")); 
    WebElement reason3 = driver.findElement(By.xpath("/html/body/div/section/div[3]/div/table/tbody/tr["+rowNum2+"]/td/div/article/section/ul/li[4]/p"));
    String medicationNameAfter = medicationName3.getText();
    String dosageAfter = dosage3.getText();
    String howMuchAfter = howMuch3.getText();
    String reasonAfter = reason3.getText();
    Assert.assertEquals(medicationNameBefore, medicationNameAfter);
    Assert.assertEquals(dosageBefore, dosageAfter);
    Assert.assertEquals(howMuchBefore, howMuchAfter);
    Assert.assertEquals(reasonBefore, reasonAfter);
}

@Test(groups = {"functionalTests.FF"})
public void test_cancelButton_FF()
{
    cancelButton("firefox");
}
@Test(groups = {"functionalTests.iOS"})
public void test_cancelButton_iOS()
{
    cancelButton("iOS");
}
@AfterMethod(alwaysRun = true)
public void tearDown()
{
    driver.quit();
}
}

我的启动测试的 XML 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Test">
  <groups>
  <run>
  <include name="functionalTests.FF"/>
  <exclude name="functionalTests.iOS"/>
  </run>
</groups>
  <classes>
  <class name="ui_Tests.AddPrescription" />
  <class name="ui_Tests.ClickAddMedication"/>
  <class name="ui_Tests.EditMedications_ValidateItems"/>
  <class name="ui_Tests.EditMedications_MedicationNameReadOnly"/>
  <class name="ui_Tests.EditMedications_EditStrengthForm"/>
  <class name="ui_Tests.EditMedications_HowMuch"/>
  <class name="ui_Tests.EditMedications_HowOften"/>
  <class name="ui_Tests.EditMedications_Reason"/>
  <class name="ui_Tests.EditMedications_Cancel"/>
  <class name="ui_Tests.ExpandCollapseView"/>
  </classes>
  </test> <!-- Test -->
  </suite> <!-- Suite -->

因此,通过包含/排除,我可以告诉它在哪些浏览器上运行测试。

于 2013-01-30T19:16:36.220 回答