在selenium / java中应用过滤器后检查元素是否存在

时间:2018-06-18 09:34:02

标签: java selenium automation

我必须验证它与我已应用的过滤器匹配的结果。

我选择的过滤器是"打开"并确保结果(列表)仅包含Open。​​

我想过使用文本的xpath" Open"但每个显示结果的xpath变化如下:

@Override
protected void onDestroy() {
    super.onDestroy();
    releaseMediaRecorder();
    if (camera != null) {
        camera.stopPreview();
        camera.setPreviewCallback(null);
        camera.release();
        camera = null;
    }
}

private void releaseMediaRecorder() {
    if (mediaRecorder != null) {
        mediaRecorder.release(); // release the recorder object
        mediaRecorder = null;
    }
}

它的外观如下:

enter image description here

第一次公开结果的HTML:

1st result - (//SPAN[@class='ng-binding'][text()='OPEN'][text()='OPEN'])[1]

2nd result - (//SPAN[@class='ng-binding'][text()='OPEN'][text()='OPEN'])[2]

3rd result - (//SPAN[@class='ng-binding'][text()='OPEN'][text()='OPEN'])[3]

and so on...

是否有更好的方法断言只有" Open"结果显示?顺便说一下,结果中有一个滚动条。

3 个答案:

答案 0 :(得分:1)

您可以使用java 8 streams API过滤OPEN状态:

boolean issueOtherThanOPENIsPresent = driver.findElements(By.xpath("//div[@class='issue-status-group']//span")).stream().filter(element -> !element.getAttribute("innerText").trim().equals("OPEN")).findFirst().isPresent();
    if (issueOtherThanOPENIsPresent) {
        System.out.println("There are issues present which contains status other than OPEN");
    } else {
        System.out.println("All issues contains status OPEN");
    }

这里检查是否存在任何不包含状态的WebElement" OPEN" ,如果它存在,它将返回" true"否则"假"。 此外,您不必每次都会计算出现的结果数量。 它将根据任何给定的文本过滤列表。

我希望它也能简化答案。

答案 1 :(得分:0)

在这里,您要选择具有文本OPEN的元素。因此,项目可能具有不同的状态。

有两种方法可以很好地测试滤波器。

检查每个项目的状态:选择所有元素并检查状态文本是否等于OPEN,如下所示。

List<WebElement> lstItems = driver.findElements(By.xpath("//div[@class='issue-status-group']/div/span [class='ng-binding']"));
for(WebElement eleItem: lstItems){
   Assert.assertEquals(eleItem.getText(),"OPEN");
 }

检查计数:第二种方法是,找到带有文本OPEN的所有元素并检查它的计数。

List<WebElement> lstItems = driver.findElements(By.xpath("//span[class='ng-binding' and text()='OPEN']"));
Assert.assertEquals(lstItems.size(), 10) //assumed no of open items are 10 here.

答案 2 :(得分:0)

考虑为开放结果提供的HTML。请在下面找到解释代码。

首先将所有Result元素存储在List中:

  List<WebElement> statusFilterResult = driver.findElementsByXPath("//div[@class='issue-status-group']//div[@class='status-icon']/..//span");

创建一个函数,该函数将验证列表中所有Web元素的文本,如果结果为打开,则返回true,否则它将返回false。

private static Boolean verifyElementsInList(
        List<WebElement> statusFilterResult) {
    Boolean flag = true;
    // TODO Auto-generated method stub
    for(WebElement status: statusFilterResult){
        if(!status.getText().trim().equalsIgnoreCase("Open")){
            flag = false;
            break;
        }
    }
    return flag;
}

在主要功能之后添加下面提到的代码:列表statusFilterResult = driver.findElementsByXPath(“// div [@ class ='issue-status-group'] // div [@ class ='状态图标'] /..//跨度“);

 Boolean result = verifyElementsInList(statusFilterResult);
      if(result){
          System.out.println("The status type is Open for all the issues on the page");
      }else{
          System.out.println("The status other than open is present on the page");
      }