[英]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.