Selenium WebDriver通用测试

时间:2017-09-22 08:36:44

标签: c# unit-testing selenium selenium-webdriver automation

我在c#中探索selenium web驱动程序。我想让我的测试尽可能通用。我想要的是,当我的表单加载时,所有文本字段都被识别并填入一些虚拟数据。当我使用下面指定的switch语句时,只填充第一个文本字段。如何让它获取所有字段并逐个填充

foreach (var group in form.GroupFormFields)
{
   foreach (var field in group.FormFields)
   {
      var fieldId = "txt_" + field.field_title;

      switch (field.field_type_id)
      {
         case "textfield":
            var textfield = Driver.Instance.FindElement(By.XPath("//input[@type='text']"));
            textfield.SendKeys("abc");
            //field.field_title
            //fill the form field
            break;
         case "email":
            var email = Driver.Instance.FindElement(By.XPath("//input[@type='email']"));
            email.SendKeys("xyz@gmail.com");
            break;
         case "password":
            var password = Driver.Instance.FindElement(By.XPath("//input[@type='password']"));
            password.SendKeys("Abc1234%");
            break;
         case "checkbox":
            var checkbox = Driver.Instance.FindElement(By.XPath("//input[@type='checkbox']"));
            checkbox.Click();
            break;
            default:
            break;
      }
   }
}   

3 个答案:

答案 0 :(得分:1)

切换案例是在特定条件下执行特定代码,因此根据您传递的内容caseField,因为特定情况将被调用不是全部

如果要用虚拟数据填充所有输入字段,最简单的方法是获取所有输入元素并迭代它们。我不是C#,但是JAVA和C#非常相似所以你可以理解这段代码。

List<WebElement> inputs = driver.findElements(By.xpath("//input"));
for(WebElement input: inputs){
    input.sendKeys("filled through automation");
}

答案 1 :(得分:1)

使用selenium开发自动化项目很难维护,因为有时我们需要自动化大而复杂的系统,最佳做法是使用Page Object设计模式。 在自动化项目中实现Page Object将帮助编码人员坚持SOLID原则。 您可以使用负责业务逻辑的类来包装页面对象 - 填写表单。 请查看以下示例

enter image description here

包装并实施填充详细信息部分

enter image description here

现在你所要做的就是调用pageObjectContainer.FillDetails(submit:true)

答案 2 :(得分:0)

我认为你可以创建一个List:

  • 键:输入的ID
  • 价值:您想要输入的值

创建一个for循环查看List,找到Element by Key并输入Value。