Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查一个元素没有';在selenium/java中应用过滤器后不存在_Java_Selenium_Automation - Fatal编程技术网

检查一个元素没有';在selenium/java中应用过滤器后不存在

检查一个元素没有';在selenium/java中应用过滤器后不存在,java,selenium,automation,Java,Selenium,Automation,我必须验证结果是否与我应用的过滤器匹配 我选择的过滤器是“打开”的,并确保结果(这是一个列表)只包含“打开” 我曾想过使用文本“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

我必须验证结果是否与我应用的过滤器匹配

我选择的过滤器是“打开”的,并确保结果(这是一个列表)只包含“打开”

我曾想过使用文本“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>&nbsp;</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>

发行号
6530
描述
自动化测试
添加的照片
()
地位
日期
1/0
隐藏缩略图
显示缩略图
OPEN6530自动测试

是否有更好的方法来断言只显示“打开”结果?顺便说一句,结果中有一个滚动条。

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

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

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

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 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.
List lstItems=driver.findElements(By.xpath(//span[class='ng-binding'和text()='OPEN']);
Assert.assertEquals(lstItems.size(),10)//假定此处没有10个打开的项。

您可以使用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");
    }
在这里,它检查是否存在任何不包含状态“OPEN”的WebElement,如果存在,则返回“true”,否则返回“false”。 此外,您不必每次都计算将显示的结果数。 它将根据任何给定的文本过滤列表


我希望它也能简化答案。

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

首先将所有结果元素存储在列表中:

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

请您提供HTML源代码,以便我们可以帮助您。我正在尝试下面提到的所有方法并发布我的观察结果。您正在查找文本打开的元素,并检查文本是否打开。这总是正确的。嗨,Murthi,如果你仔细查看我在实际比较之前添加的代码行“!”即“not condition”,如果每个元素都包含“OPEN”,它将返回false,我想你现在明白了。不,你的xpath选择的元素只有OPEN文本。您如何期望文本是其他打开的呢?“打开”缺陷div是:OPEN,根据这一点,给出的xpath是正确的。您可以打印使用此选项的元素的内部文本,并可以找到显示的其他状态。如果选择了“打开”以外的其他过滤器,则只会影响结果,否则不会影响结果。如果这对你没有帮助,我们可以讨论这个问题。嘲笑我sandpdangi13@gmail.comIget
无法解析符号WebElements
错误。知道为什么吗?应该是web元素列表而不是web元素。更新了答案。请检查。即使我将预期的“PEN”改为“OPEN”,测试仍将通过,但如果我将
“//div[@class='issue-status-group']///span”
用作xpath,则测试可以正常工作。这是否正确?如果在代码运行时尝试添加更多筛选器(而不是OPEN),则失败,这是正确的,但错误消息是
“//div[@class='issue-status-group']///span”
,而不是实际的和预期的。如何使其以实际/预期格式显示?
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;
}
 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");
      }