javascript - Protractor 测试有时会失败

标签 javascript protractor angularjs-e2e

我使用 Protractor 为我的应用程序编写端到端测试。我确信测试应该是正确的。但我看到错误:ElementNotVisibleError: element not visible , Expected false to be true , No 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)

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

它会是什么?谢谢。

最佳答案

两个可能有用的提示。

  1. 在你的 protractor.conf.js 中设置窗口大小,这样窗口的大小总是一样的,并且应该总是显示相同的元素。
  2. 将 html 与屏幕截图报告器结合使用,这样您就可以在任何案例失败时看到屏幕上的内容。

这两个技巧甚至适用于 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...');
        }
    );


},

关于javascript - Protractor 测试有时会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997442/

相关文章:

javascript - 从谷歌地理编码API获取latLong

javascript - 使用来自 Ajax 响应的 JSON 数据数组?

python - 在 Python 中使用 Angular JS( Protractor )和 Selenium

protractor - e2e Protractor 测试应该有多深?

javascript - Google Chrome 中标签的 tabId 何时更改?

javascript - 关于 this/@ 在 Javascript/Coffeescript 中的一个难题

angularjs - 在基于 AngularJS 的 Web 应用程序中使用 Selenium

javascript - 如何从 Protractor 中的父元素返回子元素

angularjs - 如何在 Protractor 中启动任何测试用例之前运行 javascript 函数?

angularjs - Protractor 中的“$”选择器