如何找到具有两种状态的占位符:clear和class =“ error”

时间:2019-06-18 14:19:47

标签: java selenium selenium-webdriver xpath css-selectors

我正在测试ContactUs表单。 字段中有两个占位符状态。 第一种状态-什么也没填。

<label for="edit-submitted-name">Name </label>

第二种状态-表单发送时出现验证错误。

<label for="edit-submitted-name" class="error">Name </label>

我想检查,是否在发送class =“ error”之后出现。

这是我尝试执行的操作:

if (driver.getPageSource().contains("error")) {
        System.out.println("Validation down");
    } else {
        System.out.println("Validation okay");
}

3 个答案:

答案 0 :(得分:2)

您可以在页面源中获得//label[@for='edit-submitted-name' and not(@class='error')] 字符串的多个实例,最好明确标识唯一元素,这样就不会出现误报匹配。

这是使用XPath定位器完成的方法:

  1. 未填写任何内容的标签:

    //label[@for='edit-submitted-name' and @class='error']
    

    enter image description here

  2. 带有验证错误的标签:

    if (driver.findElements(By.xpath("//label[@for='edit-submitted-name' @class='error']")).size() > 0) {
        System.out.println("Validation error is present.");
    }
    

    enter image description here

检查验证错误是否存在的示例Java代码:

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        style="@style/Widget.AppCompat.Toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:title="@string/app_name"
        app:navigationIcon="@drawable/ic_menu_black_24dp">

    </com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>

更多信息:

答案 1 :(得分:1)

要验证是否存在class="error",可以使用以下解决方案:

  • 使用cssSelector

    try {
        driver.findElement(By.cssSelector("label[for='edit-submitted-name']:not(.error)"))
        System.out.println("Validation okay");
    }
    catch (NoSuchElementException e) {
        System.out.println("Validation down");
    }
    
  • 使用xpath

    try {
        driver.findElement(By.xpath("//label[@for='edit-submitted-name' and not(@class='error')]"))
        System.out.println("Validation okay");
    }
    catch (NoSuchElementException e) {
        System.out.println("Validation down");
    }
    

答案 2 :(得分:1)

这可以通过使用简单的CSS选择器来实现,请参见以下内容

正常状态

label[for='edit-submitted-name']

错误状态

 

   label[for='edit-submitted-name'].error