我必须验证它与我已应用的过滤器匹配的结果。
我选择的过滤器是"打开"并确保结果(列表)仅包含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;
}
}
它的外观如下:
第一次公开结果的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"结果显示?顺便说一下,结果中有一个滚动条。
答案 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");
}