簡體   English   中英

使用Selenium WebDriver進行CRUD測試

[英]CRUD testing with selenium webdriver

我正在嘗試運行測試,這些測試將使用Web應用程序從數據庫創建,編輯和刪除條目。 我遇到的問題是測試相互依賴。 例如,我必須首先創建條目以進行編輯或刪除。 什么是合適的方法? 有沒有一種方法可以按特定順序執行測試? 這是我現在的代碼示例:

[TestFixture]
public class DevicesTest : ASysTest {
    private const string DeviceName = "Automated Test Device";
    private const string EditedDeviceName = "Modified Automated Test Device";

    public override void PostInitialize() {
        this.Login("devices");
    }

    [SetUp]
    public void TestInitialize() {
        this.Driver.Navigate().GoToUrl(GetAppUrl("/devices/"));
    }

    [Test]
    public void CreateNewDeviceTest() {
        var modal = DisplayModal("create");

        var selector = new SelectElement(modal.FindElement(By.Id("CompanyID")));
        selector.SelectByIndex(2);
        modal.FindElement(By.CssSelector("option[value='1']"));
        modal.FindElement(By.Id("Name")).SendKeys(DeviceName);
        modal.FindElement(By.Id("IP_Address")).SendKeys("111.1.1.1");
        modal.FindElement(By.Id("Operating_System")).SendKeys(DeviceName);
        modal.FindElement(By.Id("Administrator_Password")).SendKeys(DeviceName);
        modal.FindElement(By.Id("Notes")).SendKeys(DeviceName);

        modal.FindElement(By.CssSelector(".btn-primary[type='submit']")).Click();

        var heading = Driver.FindElementByTagName("h1");

        Assert.IsTrue(heading.Displayed);

        StringAssert.Contains("Devices", heading.Text);

        var page = Driver.FindElementByClassName("device");

        StringAssert.Contains(DeviceName, page.Text);
    }

    [Test]
    public void EditDeviceTest() {
        var tableData = Driver.FindElement(By.XPath("//td[contains(., '" + DeviceName + "')]")); // Select <td> containing DeviceName
        var tableRow = tableData.FindElement(By.XPath("..")); // Grab parent element <tr>
        tableRow.FindElement(By.CssSelector(".modal-open[data-modal='edit-modal']")).Click(); // Click edit button contained within <tr>

        Thread.Sleep(500);

        var modal = Driver.FindElementById("edit-modal");


        modal.FindElement(By.Id("Name")).Clear();
        modal.FindElement(By.Id("Operating_System")).Clear();
        modal.FindElement(By.Id("Administrator_Password")).Clear();
        modal.FindElement(By.Id("Notes")).Clear();
        modal.FindElement(By.Id("Name")).SendKeys(EditedDeviceName);
        modal.FindElement(By.Id("Operating_System")).SendKeys(EditedDeviceName);
        modal.FindElement(By.Id("Administrator_Password")).SendKeys(EditedDeviceName);
        modal.FindElement(By.Id("Notes")).SendKeys(EditedDeviceName);
        modal.FindElement(By.CssSelector(".btn-primary[type='submit']")).Click();

        var heading = Driver.FindElementByTagName("h1");

        Assert.IsTrue(heading.Displayed);

        StringAssert.Contains("Devices", heading.Text);

        var page = Driver.FindElementByClassName("device");

        StringAssert.Contains(EditedDeviceName, page.Text);
    }

    [Test]
    public void DeleteDeviceTest() {
        var tableData = Driver.FindElement(By.XPath("//td[contains(., '" + EditedDeviceName + "')]")); // Select <td> containing DeviceName
        var tableRow = tableData.FindElement(By.XPath("..")); // Grab parent element <tr>
        tableRow.FindElement(By.CssSelector(".modal-open[data-modal='delete-modal']")).Click(); // Click delete button contained within <tr>

        Thread.Sleep(500);

        var modal = Driver.FindElementById("delete-modal");

        modal.FindElement(By.CssSelector(".btn-danger[type='submit']")).Click();

        var heading = Driver.FindElementByTagName("h1");

        Assert.IsTrue(heading.Displayed);

        StringAssert.Contains("Devices", heading.Text);

        var page = Driver.FindElementByClassName("device");

        StringAssert.DoesNotContain(EditedDeviceName, page.Text);
    }
}

作為解決方案,您可以使用字母順序:

[Test]
    public void A_Create()
    ...


[Test]
    public void B_Edit()
    ...


[Test]
    public void C_Delete()
    ...

關於

我遇到的問題是測試相互依賴

我認為您正在尋找模塊化驅動測試方法。 通常,它需要小的獨立測試腳本。 創建它們之后-您可以分層使用它們來構建更大的測試,還創建您需要/訂購的特定測試用例。

當我不得不在MVC項目中使用Selenium進行E2E測試時,我實現了自己的DB_Accessor類,該類負責CRUD。 用例:驗證來自前端的數據更改是否相應地表示在DB中。

在NUnit 2.5中,各個測試用例按字母順序排序並按該順序執行。 使用NUnit 2.5.1,不會對個別案例進行排序,而是按照NUnit發現案例的順序執行

參考: Nunit測試訂單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM