如何通过量角器在div类中单击深埋的按钮。没有编号

时间:2019-04-12 17:24:23

标签: angularjs selenium protractor

我试图通过量角器单击代码中包含在div类中的按钮。

我正在为我的工作量角器项目开创先河,但是到了我不再知道该怎么做的地步。我有一个埋在div类中的按钮,不允许我单击。我尝试使用mouseMove移到按钮的坐标,我尝试使用特定按钮的className,等等。按钮没有id。 id不是问题,因为我尝试单击由id均等地埋在div中的其他按钮。我需要知道如何遍历div层才能单击按钮,因为其余测试将取决于它。

APPLICATION CODE:
::before
<dashboard-label>
    <div class="att-topic-analysis-tabs">
       <div class="att-button-group">
          <button class="btn btn-default btn-lg att-close-topic ng-scope" 
           role="presentation" tabindex="-1" 
           ng-click="removeTopic(currentTopic.id)" translate> 
          Close Topic
          </button>
       </div>
    </div>

PROTRACTOR TEST:
it('Closes Topic Successfully', function(){
    //opens the first available topic
    openTopic.click();

    //checks that the URL contains 'topics' after 5 seconds
    browser.wait(proExpect.urlContains('topics'), 5000);
    var closeTopic = element(by.className('att-close-topic'));
    //browser.wait(proExpect.elementToBeClickable(closeTopicButton), 5000);
    console.log(closeTopic);
    closeTopic.click();



    browser.wait(proExpect.urlContains('home'), 5000);

});

如您所见,“关闭主题”按钮有点埋在div类中,标准单击不起作用。任何信息将不胜感激

3 个答案:

答案 0 :(得分:0)

这是您想阅读的内容,可帮助您调试测试为什么不起作用的原因。 另外,由于将来控制流将消失,因此您可能希望开始采用等待/异步。 http://www.protractortest.org/#/debugging

答案 1 :(得分:0)

如果closeTopic定位器找到了元素,但是没有单击它,请检查以确保DOM中只有一个匹配的元素并且它是可见的。我最喜欢的检查DOM的方法是在Chrome检查器中使用ctrl-F并粘贴测试使用的确切CSS(.att-close-topic)。并使用

检查其内容是否可见
console.log(closeTopic.isDisplayed());

这可能是量角器的一大难题,因为当页面上有多个匹配项时,它不会失败(仅警告),并且默认为第一个匹配项,而不是第一个 visible 匹配,这让我发疯了,因为很少要对页面上的不可见元素执行任何操作。


这将是部分意见,但只是为对话添加了一层...

有时,在页面上查找麻烦的元素的解决方案是返回给开发人员并使页面更具可测试性。我已经看到测试人员花费数小时或数天的时间来设计出色的解决方法来访问一个顽固的元素,最终结果是一个脆弱的,复杂的端到端测试(它们是否已经足够脆弱了?)。

有时,与开发人员进行5分钟的对话可能会导致生产代码快速更改(例如添加唯一的ID),从而避免了所有这些工作,并产生了更好,更稳定,更简单的结果。但这需要开发人员和测试团队之间进行公开对话,并且需要一种文化,即将测试视为一项主要活动,足以使生产代码的可测试性更改正常进行。

答案 2 :(得分:0)

尝试

var closebutton = element(by.css(“ [ng-click =” removeTopic(currentTopic.id)“]”), EC = protractor.ExpectedConditions;

等待元素可点击。检查显示和启用按钮状态 browser.wait(EC.elementToBeClickable(closebutton),10000);

现在使用:closebutton.click();