如何使用Selenium验证所需的输入字段

时间:2016-10-14 11:00:44

标签: java selenium selenium-webdriver automation

我是自动化测试的新手,我的任务是使用给定的注册表格实现注册学生的自动化。

这个场景让我对如何在注册表单中验证输入字段感到困惑。

我的意思是,如果我没有填写必填字段,浏览器会指示我必须填写该字段。

另一件事是我正在为2名学生使用for loop,我希望第一次将输入字段留空。提交后我必须看到它已经过验证,然后填写空输入字段再次提交(现在数据已插入字段中)。

我正在分享我的代码,并希望得到任何帮助。

public class Cartus {

    public static  void fill() throws InterruptedException {

        System.setProperty("webdriver.chrome.driver", "E:\\workspace\\chromeDriver\\chromeDriver.exe");

        ChromeDriver driver = new ChromeDriver();

        for(int i=0; i<2; i++) {

            driver.get("http://qa-5.ls.vu/v2/landing-page/cartus/en");
            driver.findElement(By.xpath("/html/body/div[4]/div/form/div[1]/div")).click();
            driver.findElement(By.xpath("/html/body/div[4]/div/form/div[1]/div/select/option[2]")).click();
            driver.findElement(By.xpath("/html/body/div[4]/div/form/div[2]/div[1]/input")).sendKeys(/*"sami"*/);
            driver.findElement(By.xpath("/html/body/div[4]/div/form/div[2]/div[2]/input")).sendKeys(/*"Mohaname"*/);

            WebElement ele=driver.findElement(By.xpath("/html/body/div[4]/div/form/div[3]/div[1]/input"));/*.sendKeys("0221-1234567");*/

            String date = FastDateFormat.getInstance("yyyyMMddHHmmss").format(System.currentTimeMillis());
            Thread.sleep(1000);
            driver.findElement(By.xpath("/html/body/div[4]/div/form/div[3]/div[2]/input"))
                    .sendKeys(/*"aali_"+date+"@outlook.com"*/);
            driver.findElement(By.id("submitButton")).click();

            if(ele.getAttribute("value").isEmpty()){
                driver.findElement(By.xpath("/html/body/div[4]/div/form/div[2]/div[1]/input")).sendKeys("abcds");
            }
            if(ele.getAttribute("value").isEmpty()){
                driver.findElement(By.xpath("/html/body/div[4]/div/form/div[2]/div[2]/input")).sendKeys("abcds");
            }
            if(ele.getAttribute("value").isEmpty()){
                driver.findElement(By.xpath("/html/body/div[4]/div/form/div[3]/div[1]/input")).sendKeys("abcds");
            }
            if(ele.getAttribute("value").isEmpty()){
                driver.findElement(By.xpath("/html/body/div[4]/div/form/div[3]/div[2]/input")).sendKeys("aali_"+date+"@outlook.com");
            }       
            System.out.println("Test case succesfully run");
        }
    }
}

谢谢。

2 个答案:

答案 0 :(得分:3)

看一下您的代码并阅读您对自动化测试不熟悉的事情,我可以告诉您的第一件事就是尽量避免使用XPath并使用cssSelector。 如果你有一个ID或CSS类可以识别你的元素,它会更安全,更短。

Here's是阅读和理解的好来源。

之后,我相信你的问题有2个问题:

  1. 如何测试空白字段的验证
  2. 当您没有填写信息时,该页面有几种方法可以验证该字段(例如,在输入失去焦点后,点击按钮提交表单等)。

    无论如何,您必须检查隐藏的HTML然后显示(带有警告消息 - 例如&#34;字段名称是必需的&#34;)并使用Selenium检查此元素现在。

    // findElements (using the plural) will not result in "Element not found exception"
    WebElement nameMessage = driver.findElements(By.id("nameErrorMessage"));
    if (nameMessage.size > 0) {
        nameMessage.get(0).getText(); // do your validation to check if the message is the one expected
    } else {
        throw new Exception("Warning message was not displayed properly");
    }
    
    1. 拥有不同数据的循环
    2. 在这种情况下,您可以拥有一个对象来保存表单中使用的信息,将其放在列表中并使用它。

      以下是一个示例:

      class Student {
          private String name;
          private Date birthday;
          private String className;
      
          public Student(String name, Date birthday, String class) {
              this.name = name;
              this.birthday = birthday;
              this.className = class;
          }
      
          // all getters and setters
      }
      
      class StudentTest {
          Student emptyStudent = new Student("", null, "");
          Student student = new Student("John", new Date(), "7th grade");
          List<Student> students = Arrays.asList(emptyStudent, student);
      
          // Set up your selenium
      
          // Loop your data to be tested
          students.forEach(student -> {
              // Fill the information with the student info
              driver.findElement(By.id("name")).sendKeys(student.getName());
              driver.findElement(By.id("birthday")).sendKeys(student.getBirthday());
              driver.findElement(By.id("className")).sendKeys(student.getClassName());
      
              // Submit the form
              driver.findElement(By.id("save")).click();
      
              // Check if warning message is shown (code the logic properly to work with and without it)
          });
      }
      

      希望它可以帮助您解决问题。

答案 1 :(得分:0)

为您提供的文本在HTML的VALUE范围内,则以下内容将起作用。例如-

value="YourText"

var UniqueName = YourElement.NameGoesHere.GetAttribute("value");

在调试时,在上述内容之后放置一个断点,并将鼠标悬停在UniqueName上,您将看到返回的文本,并且没有得到NULL,因此比起运行整个测试以使其失效,可以更轻松地验证此工作。