我在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;
}
}
}
答案 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原则。 您可以使用负责业务逻辑的类来包装页面对象 - 填写表单。 请查看以下示例
包装并实施填充详细信息部分
现在你所要做的就是调用pageObjectContainer.FillDetails(submit:true)
答案 2 :(得分:0)
我认为你可以创建一个List:
创建一个for循环查看List,找到Element by Key并输入Value。