量角器测试不时失败

时间:2014-07-28 14:25:01

标签: javascript protractor angularjs-e2e

我为我的应用程序使用量角器编写了一个结束测试。我确定测试应该是正确的。但我不时会看到错误:ElementNotVisibleError: element not visibleExpected false to be trueNo element found using locator

这是测试代码:

describe "try test message center and it", ->
  beforeEach ->
    ptor = protractor.getInstance()
    ptor.ignoreSynchronization = true

  it "should login", ->
    browser.driver.get homeURL
    browser.manage().window().maximize()
    element(`by`.xpath('//select/option[2]')).click()
    element(`by`.css('.buttons input')).click()

  it "should url is as expected", ->
    ptor = protractor.getInstance()
    expectedUrl = homeURL + '#/messages' 
    expect(ptor.getCurrentUrl()).toBe(expectedUrl)

  it "should create and send new message", ->
    ptor = protractor.getInstance()
    ptor.sleep 1000
    element(`by`.css('button.btn-primary')).click()
    element(`by`.model('uiData.createRecipient')).sendKeys 'James'
    ptor.sleep 1000
    element.all(`by`.repeater('match in matches')).get(1).click()
    element(`by`.model('uiData.createSubject')).sendKeys 'subject 2'
    element(`by`.model('uiData.createText')).sendKeys 'body of message'
    ptor.sleep 1000
    element(`by`.css('div.form-group a.btn-primary')).click()
    ptor.sleep 1000
    expect(element(`by`.css('.popupBox')).isPresent()).toBe(true)

  it "should check new message", ->
    ptor = protractor.getInstance()
    ptor.get('#/messages?folder=1')
    ptor.driver.navigate().refresh()
    ptor.sleep 5000
    element(`by`.model('uiData.to')).sendKeys 'k'
    ptor.sleep 3000
    element.all(`by`.cssContainingText('span.grid-col-to', 'James')).last().click()
    ptor.sleep 1000
    expect(element(`by`.xpath('//*[text()[contains(.,"body of message")]]')).isPresent()).toBe(true)
    element(`by`.xpath('//*[text()[contains(.,"Own it!")]]')).click()
    ptor.sleep 1000
    expect(element(`by`.cssContainingText('span', 'Owned by')).isPresent()).toBe(true)
    element(`by`.xpath('//*[text()[contains(.,"Disown it")]]')).click()
    ptor.sleep 1000
    expect(element(`by`.cssContainingText('span', 'Disowned by')).isPresent()).toBe(true)

量角器v1.0.0, Grunt量角器转轮v1.0.1 节点v0.10.28, NPM v1.4.9, Chrome驱动程序v2.10, Selenium Server v2.42.2。 Jenkins在Windows Server 2008 R2下运行的测试

它可能是什么?感谢。

2 个答案:

答案 0 :(得分:3)

可能会有所帮助的两个提示。

  1. 在protractor.conf.js中设置windowsize,因此窗口的大小始终相同,并且应始终显示相同的元素。
  2. 使用带屏幕截图记者的html,这样您就可以在任何案例失败时看到屏幕上显示的内容。
  3. 这两个提示甚至适用于phantomjs。 将以下内容添加到protractor.conf.js

    onPrepare: function () {
        // The require statement must be down here, since jasmine-reporters
        // needs jasmine to be in the global and protractor does not guarantee
        // this until inside the onPrepare function.
        var browserName,
            platform,
            window = browser.manage().window();
    
        require('jasmine-reporters');
        require('protractor-html-screenshot-reporter');
    
        jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
        // create a html reporter with screenshots
        jasmine.getEnv().addReporter(new HtmlReporter({
            baseDirectory: 'reports/screenshots'   ,
            takeScreenShotsOnlyForFailedSpecs: true
        }));
    
        // set the window size
        browser.getCapabilities().then(function (capabilities) {
                browserName = capabilities.caps_.browserName;
                platform = capabilities.caps_.platform;
            }
        ).then(function getCurrentWindowSize() {
                return window.getSize();
            }
        ).then(function setWindowSize(dimensions) {
                var windowWidth = 1980,
                    windowHeight = 1200;
    
                return window.setSize(windowWidth, windowHeight);
            }
        ).then(function getUpdatedWindowSize() {
                return window.getSize();
            }
        ).then(function showWindowSize(dimensions) {
                console.log('Browser:', browserName, 'on', platform, 'at', dimensions.width + 'x' + dimensions.height);
                console.log('Running e2e tests...');
            }
        );
    
    
    },
    

答案 1 :(得分:1)

如果您移动窗口或调整窗口大小,它可以隐藏Protractor正在寻找的元素。或者,在页面上的所有元素可视完成加载之前,Protractor有时会移动到下一行代码。由于Protractor模拟人类用户,因此它拒绝与隐藏元素进行交互。

另外,你应该尽可能避免使用睡眠。