分页器在页面加载后找不到元素

时间:2019-01-02 09:06:13

标签: angular selenium protractor automated-tests

似乎是一个常见问题,但找不到与我的问题相对应的任何内容。

我的测试运行良好,直到重新加载页面并需要从下拉列表中捕获元素为止。首先,我尝试使用IsPresent来查看量角器是否可以找到包装器,这些包装器是下拉列表中的谎言“ workbenchItems”,并且我还添加了一个长时间的睡眠,但它不起作用,然后当然也无法捕获下拉列表-该元素我需要捕捉的是最后一行:'我需要捕捉的下拉菜单中的元素'

在此处查看量角器代码:

<div class="workbenchItems">
    <div data-uib-accordion="" data-close-others="false" data-template- url="modules/common/accordion/accordion.tpl.html">
        <div role="tablist" class="panel-group accordion" ng-transclude="">
            <div data-uib-accordion-group="" ng-click="$ctrl.setIsOpen($ctrl.itemIndex, $ctrl.isOpen)" class="panel-default ng-scope ng-isolate-scope panel panel-open"
                data-template-url="modules/common/accordion/accordion-group.tpl.html" data-nobody="true"
                data-leveltitle="h3" data-is-open="$ctrl.isOpen">
                <div class="panel-heading no-bottom-border" data-ng-class="{'no-bottom-border': noBody}" style="">
                    <h2 class="panel-title"><a href="" tabindex="0" class="accordion-toggle" ng-click="toggleOpen()"
                            uib-accordion-transclude="heading"><span uib-accordion-header="" ng-class="{'text-muted': isDisabled}"
                                ng-bind-html="heading" class="ng-binding">
                                <div class="ng-scope"><span ng-bind="::$ctrl.item.sectionName" class="ng-binding">Element
                                        from dropdown that I need to catch</span> <span class="count ng-binding"
                                        ng-bind="::$ctrl.item.sectionCount">2159</span></div>
                            </span></a></h2>
                </div>
                <div class="panel-collapse in collapse" uib-collapse="!isOpen" aria-expanded="true" aria-hidden="false"
                    style="">

这就是我试图从行中捕获第二个元素的原因

const toolaud = await element.all(by.tagName('accordion-toggle')).get(1);
     toolaud.click();
     browser.waitForAngular();
     browser.sleep(60 * 1000);

1 个答案:

答案 0 :(得分:0)

使用by.css("h2.panel-title a")代替by.tagName('accordion-toggle')

解决方案:

element.all(by.css("h2.panel-title a")).get(0);

由于面板标题很多,因此上面的代码将使您获得第一个面板标题。
您可以在get()函数中提供index的值来获取相应的面板标题。
如果您提供2作为索引,例如get(2),则它将获得第3个面板标题[索引从0开始而不是1]。

说明:

h2.panel-title a的意思是:

搜索具有类h2的{​​{1}}标签元素。之后,在找到的标记HTML代码中搜索panel-title标记。


其他信息:

  1. 如果只有1个面板标题,那么还有1种方法可以解决相同的问题。

    a
  2. element(by.css("h2.panel-title a")); $$("h2.panel-title a").get(0)的含义和作用方式相同。始终在各处保留相同的语法总是更好。因此,它对其他开发人员的混乱程度降低了。如果您使用element.all(by.css("h2.panel-title a")).get(0)element()语法而不是element.all()$(),则我建议保持语法不变,即使两种语法都产生结果相同。