量角器点击功能并不总是有效

时间:2016-12-27 10:17:03

标签: javascript angularjs jasmine protractor end-to-end

我是量角器的新手。我已经为第一个用户登录应用程序编写了一个角度测试,然后单击特定按钮来计算一个数字。有时它有效,有时不行!

这是代码:

describe('Protractor Demo App', function () {

    it('should login to app', function () {
        browser.get('http://localhost:8080/main');
        var userName = element(by.id('username'));
        var passWord = element(by.id('pwd'));
        var loginBtn = element(by.id('loginBtn'));
        userName.sendKeys('user');
        passWord.sendKeys('1');
        loginBtn.click();
        expect(browser.getCurrentUrl()).toEqual('http://localhost:8080/main/#/intro');
    });


   it('should calculate something', function () {
        browser.get('http://localhost:8080/main/#/something');
        var next = element(by.css('[ng-click="calculate()"]'));
        element(by.model('accountNo')).sendKeys('0293949223008');
        next.click();  
        expect(element(by.binding('result')).getText()).toEqual('55017000000029');
    });

    it('should show error for invalid input no', function () {
        browser.get('http://localhost:8080/main/#/something');
        var next = element(by.css('[ng-click="calculate()"]'));
        element(by.model('accountNo')).sendKeys('9999456123789');
        next.click();
        expect(element(by.css('[class="messageObject warning"]')).getText()).toEqual('message for invalid input');
    });
});

首先“它”总是有效,但第二和第三,有时工作。碰巧只有其中一人没有工作;

这是错误:

  

消息:       失败:未知错误:    元素...在点(1214,   275)。其他元素会收到点击:...         (会议信息:chrome = 55.0.2883.87)         (驱动信息:chromedriver = 2.26.436362(5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform = Windows NT   10.0.10240 x86_64)(警告:服务器未提供任何堆栈跟踪信息)       命令持续时间或超时:78毫秒       构建信息:版本:'2.53.1',修订版:'a36b8b1',时间:'2016-06-30 17:37:03'       系统信息:主机:'user',ip:'ip',os.name:'Windows 8.1',os.arch:'amd64',os.version:'6.3',java.version:'1.8.0_45'       驱动程序信息:org.openqa.selenium.chrome.ChromeDriver       功能[{applicationCacheEnabled = false,rotate = false,mobileEmulationEnabled = false,networkConnectionEnabled = false,   铬= {chromedriverVersion = 2.26.436362   (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),userDataDir ='add'},   takesHeapSnapshot = true,pageLoadStrategy = normal,   databaseEnabled = false,handlesAlerts = true,hasTouchScreen = false,   version = 55.0.2883.87,platform = WIN8_1,browserConnectionEnabled = false,   nativeEvents = true,acceptSslCerts = true,locationContextEnabled = true,   webStorageEnabled = true,browserName = chrome,takesScreenshot = true,   javascriptEnabled = true,cssSelectorsEnabled = true,   unexpectedAlertBehaviour =}]       会议ID:45d78fbebf15daa1dde971f5f7470551

我不知道问题是什么。谁能帮我? 提前谢谢。

3 个答案:

答案 0 :(得分:8)

在执行单击操作之前,使用ExpectedConditions.isElementToBeClickable()方法实现browser.wait()。您遵循如下:

   var EC = protractor.ExpectedConditions;

 it('should show error for invalid input no', function (){
    browser.get('http://localhost:8080/main/#/something');
    var next = element(by.css('[ng-click="calculate()"]'));
    element(by.model('accountNo')).sendKeys('9999456123789');

    browser.wait(EC.elementToBeClickable(next ), 10000,'Element not  
                                                  clickable');
    next.click();
    expect(element(by.css('[class="messageObject  
    warning"]')).getText()).toEqual('message for invalid input');
   });

答案 1 :(得分:0)

这是对Suresh Salloju的回答的扩展,其中的解决方案是使用Protractor的API等待元素可点击,如下所示:

browser.wait(EC.elementToBeClickable(element), 10000,'Element not clickable');

在某些情况下,即使等待elementToBeClickable,也会发生类似的异常。

在我的情况下,在某些屏幕尺寸下,toast元素覆盖了问题中的元素-因此,尽管它是可单击的,但从未收到点击。

答案 2 :(得分:0)

作为最后的手段,您可以使用javascript单击。请查看下面经过测试的代码。

var homelink = element(by.linkText('Home'))。click(); browser.executeScript(“ arguments [0] .click();”,homelink);