我必须验证它与我应用的过滤器匹配的结果。
我选择的过滤器是" Open“,并确保结果(这是一个列表)只包含Open。
我想使用文本"Open“的xpath,但是每个显示结果的xpath都会发生如下变化:
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...这就是它的样子:

第一次公开结果的HTML:
<div class="issues-list-item clearfix"><div class="issue-thumbnail"><div class="thumbnail-img gallery ng-isolate-scope" ng-gallery="" images="IssuesListItemCtrl.issue.attachments" thumbs-num="11" description="IssuesListItemCtrl.issue.description" issuenum="IssuesListItemCtrl.issue.issueNumber"><!-- ngIf: image.thumb -->
<div class="ng-overlay ng-hide" ng-show="opened">
</div>
<div class="ng-gallery-content ng-hide" unselectable="on" ng-show="opened" ng-swipe-left="nextImage()" ng-swipe-right="prevImage()">
<div class="uil-ring-css ng-hide" ng-show="loading"><div></div></div>
<div class="header-section">
<div class="header-text">
<span class="heading issue-num-heading">
<div class="header-title ng-binding">Issue no</div>
<div class="header-content ng-binding">6530</div>
</span>
<span class="heading desc-heading">
<div class="header-title ng-binding">Description</div>
<div class="header-content ng-binding">Automation Test</div>
</span>
<span class="heading photo-added-heading">
<div class="header-title ng-binding">Photos added by</div>
<div class="header-content ng-binding"> ()</div>
</span>
<span class="heading status-heading">
<div class="header-title ng-binding">Status</div>
<div class="status-icon" id="statsIcon"></div>
<div class="header-content ng-binding"></div>
</span>
<span class="heading date-heading">
<div class="header-title ng-binding">Date</div>
<div class="header-content ng-binding"></div>
</span>
<span class="close-heading" title="Close">
<div class="close-btn" ng-click="closeGallery()"></div>
</span>
</div>
</div>
<a href="" target="_blank" ng-show="showImageDownloadButton()" class="download-image ng-hide"><i class="fa fa-download"></i></a>
<a class="close-popup" ng-click="closeGallery()"><i class="fa fa-close"></i></a>
<div class="nav-left previous-btn" title="Previous photo" ng-click="prevImage()"></div>
<div class="current-image" ng-click="nextImage()" ng-show="!loading" ng-mousemove="showZoomControls($event)">
<!-- hack to save the image -->
<img class="current-image-save">
</div>
<div class="nav-right next-btn" title="Next photo" ng-click="nextImage()"></div>
<span id="zoom-image" ng-mouseover="alwaysShowZoomControls()">
<div>
<!-- ngIf: !imageZoomed --><span class="zoom-out-grey ng-scope" ng-if="!imageZoomed"></span><!-- end ngIf: !imageZoomed -->
<!-- ngIf: imageZoomed -->
<span class="zoom-in" title="Zoom in" ng-click="zoomIn()"></span>
</div>
</span>
<span class="info-text">
<div><span class="photo-count ng-binding">1/0</span></div>
</span>
<div class="thumb-right-btn" ng-show="showThumbnails" ng-click="scrollRight(200)"></div>
<div class="ng-thumbnails-wrapper">
<div class="thumbnail-hide-icon" ng-show="showThumbnails" ng-click="hideThumbnailList()"></div>
<div class="thumbnail-hide-header ng-binding" ng-click="hideThumbnailList()" ng-show="showThumbnails">
Hide Thumbnails
</div>
<div class="thumbnail-show-icon ng-hide" ng-show="!showThumbnails" ng-click="showThumbnailList()"></div>
<div class="thumbnail-show-header ng-binding ng-hide" ng-click="showThumbnailList()" ng-show="!showThumbnails">
Show Thumbnails
</div>
<div class="ng-thumbnails slide-left" ng-show="showThumbnails">
<!-- ngRepeat: i in images -->
</div>
</div>
<div class="thumb-left-btn" ng-show="showThumbnails" ng-click="scrollLeft(200)"></div>
</div></div><!-- ngIf: IssuesListItemCtrl.issue.attachments.length === 0 --><div class="ng-thumb no-thumbnail ng-scope" ng-if="IssuesListItemCtrl.issue.attachments.length === 0"></div><!-- end ngIf: IssuesListItemCtrl.issue.attachments.length === 0 --></div><div class="issue-status-group"><div class="issue-status open" ng-class="IssuesListItemCtrl.issue.status | lowercase"><div class="status-icon"></div><span class="ng-binding">OPEN</span></div></div><div class="content"><div class="issue-number-n-type line"><span class="issue-number ng-binding">6530</span><span> </span><span class="issue-type ng-binding">DEFECT</span></div><div class="description line"><span class="ng-binding">Automation Test</span></div><!-- ngIf: IssuesListItemCtrl.getAssignedTo() --><!-- ngIf: IssuesListItemCtrl.issue.dueDate --></div><div fm-photo-slide-show="" image-list="IssuesListItemCtrl.photoSlides" class-names="issue-list-photo-slide-show"></div></div>是否有更好的方法来断言只显示"Open“结果?顺便说一句,结果中有一个卷轴。
发布于 2018-06-18 10:27:23
在这里,您将选择打开文本的元素。因此,有一种可能的项目具有不同的地位。
有两种方法可以很好地测试滤波器。
检查每个项目的状态:选择all元素并检查状态文本是否等于打开,如下所示。
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");
}检查计数:第二种方法是,找到打开文本的所有元素并检查其计数。
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.发布于 2018-06-18 10:35:42
您可以使用java 8 streams API过滤打开状态:
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存在,如果它存在,它将返回"true“,否则返回"false”。此外,您也不必每次计算结果的数量将出现。它将根据任何给定的文本过滤列表。
我希望它也能简化答案。
发布于 2018-06-18 10:50:39
考虑到为Open结果提供的HTML。请找到下面的代码和解释。
首先,将所有结果元素存储在列表中:
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;
}将下面提到的代码添加到主函数中的行后面:List statusFilterResult =
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");
}https://stackoverflow.com/questions/50906477
复制相似问题