量角器-如果显示了元素,则单击它不适用于by.buttonText

时间:2018-11-27 12:51:26

标签: angularjs selenium selenium-webdriver protractor

由于我现在使用带有可变文本的单个按钮,因此我已从按ID查找元素切换为by.buttonText。我的测试开始失败。

这是我的按钮

<button type="button" class="btn btn-primary" ng-click="vm.watchUnwatchDriver()">{{vm.model.isWatched ? 'Un-' : ''}}Watch Driver</button>

这根据vm.model.isWatched评估为“监视驱动程序”或“监视驱动程序”。

最初,我将按钮设置为“监视驱动程序”,以便测试是否显示了“监视”按钮,如果可能,则单击该按钮。

我已经开始看到此消息

  

失败:使用定位器找不到元素:by.buttonText(“监视驱动程序”)✗

我的测试看起来像这样

describe('Watch/Un-Watch Driver Test', function() {

    var watchBtn = element(by.buttonText('Watch Driver'));
    var unwatchBtn = element(by.buttonText('Un-Watch Driver'));

    it('should set Driver watch status to default: un-watched', function() {

        unwatchBtn.isDisplayed().then(function(visible) {
            if (visible) {
                unwatchBtn.click();
            }
        });

        expect(unwatchBtn.isDisplayed()).toBe(false);
    });

    it('should watch a driver', function() {
        watchBtn.click();
        expect(unwatchBtn.isDisplayed()).toBe(true);
    });

    it('should un-watch a driver', function() {
        unwatchBtn.click();
        expect(unwatchBtn.isDisplayed()).toBe(false);
    });

});

3 个答案:

答案 0 :(得分:0)

尝试打印按钮文本并观察例如:

proc sql

然后在by.buttonText中使用该文本

答案 1 :(得分:0)

isPresent()对我来说似乎还可以。它可以成功检测是否存在具有该名称的按钮。

it('should set Driver watch status to default: un-watched', function() {

    unwatchBtn.isPresent().then(function(visible) {
        if (visible) {
            unwatchBtn.click();
            expect(unwatchBtn.isPresent()).toBe(false);
        } else {
            expect(unwatchBtn.isPresent()).toBe(false);
        }
    });
});

答案 2 :(得分:0)

您可以尝试element(by.partialButtonText('Watch Driver')),它在两种情况下都可以使用。