Двойной щелчок не срабатывает при тестировании веб-страницы React 0.5.0 с помощью Intern

Я пытаюсь использовать Intern для создания функциональных тестов для веб-страницы React (0.12.2). Я столкнулся с проблемой при попытке протестировать функциональность, которая запускается событием dblclick. Событие обычно срабатывает, когда я вручную тестирую веб-страницу, но не срабатывает в моих внутренних тестах.

Кроме того, не уверен, что эта информация имеет значение, но в среде, которую я тестирую (Dartium), brokenMouseEvents соответствует true, а brokenDoubleClick соответствует false. Я использую Selenium для своего сервера WebDriver (v2.43.1, с Core v2.43.1. Создан из версии 5163bce).

Я тестирую на SauceLabs. Вот мой журнал ошибок: https://github.com/danielbank/testDoubleClick/blob/master/saucelabs_results.log

Репозиторий GitHub:

https://github.com/danielbank/testDoubleClick

Реагировать Страница:

<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8">
    <title>Test Doubleclick</title>
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0">
</head>
<body>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.12.2/react.js"></script>
<script>
    var HelloWorld = React.createClass({
        render : function() {
            return React.DOM.div({},[
                React.DOM.button({'id': 'foo', 'onDoubleClick': function() {
                    React.renderComponent(React.DOM.p({'id': 'double-click-fired'},['Double Click Fired']), document.body);
                }}, ['Double Click Me']),
                React.DOM.button({'id': 'bar', 'onClick': function() {
                    React.renderComponent(React.DOM.p({'id': 'click-fired'},['Click Fired']), document.body);
                }}, ['Click Me'])
            ]);
        }
    });
    React.renderComponent(
            HelloWorld({}),
            document.body
    );
</script>
</html>

Внутренние тесты:

define([
    'intern!object',
    'intern/chai!assert',
    'require'
], function (registerSuite, assert) {
    registerSuite({
        name: 'test doubleclick functionality',
        'test singleclick': function () {
            return this.remote.get('http://localhost:8010/web/test_doubleclick.html')
                .findById('bar')
                .sleep(2000)
                .click()
                .end()
                .sleep(2000)
                .findById('click-fired')
                .getVisibleText()
                .then(function(text) {
                    assert.equal(text, 'Click Fired');
                });
        },
        'test doubleclick': function () {
            return this.remote.get('http://localhost:8010/web/test_doubleclick.html')
                .findById('foo')
                .sleep(2000)
                .doubleClick()
                .end()
                .sleep(2000)
                .findById('double-click-fired')
                .getVisibleText()
                .then(function(text) {
                    assert.equal(text, 'Double Click Fired');
                });
        }
    });
});

Внутренняя конфигурация:

define({
    proxyPort: 9000,

    proxyUrl: 'http://localhost:9000/',

    capabilities: {
        'selenium-version': '2.44.0'
    },

    environments: [
        { browserName: 'internet explorer', version: '11', platform: 'Windows 8.1' },
        { browserName: 'internet explorer', version: '10', platform: 'Windows 8' },
        { browserName: 'internet explorer', version: '9', platform: 'Windows 7' },
        { browserName: 'firefox', version: '28', platform: [ 'OS X 10.9', 'Windows 7', 'Linux' ] },
        { browserName: 'chrome', version: '34', platform: [ 'OS X 10.9', 'Windows 7', 'Linux' ] },
        { browserName: 'safari', version: '6', platform: 'OS X 10.8' },
        { browserName: 'safari', version: '7', platform: 'OS X 10.9' }
    ],

    maxConcurrency: 3,

    tunnel: 'SauceLabsTunnel',

    tunnelOptions: {
        username: '<username>',
        accessKey: '<accessKey>'
    },

    useLoader: {
        'host-node': 'dojo/dojo',
        'host-browser': 'node_modules/dojo/dojo.js'
    },

    reporters: ['pretty'],

    functionalSuites: [ 'tests/functional/index' ],

    excludeInstrumentation: /^(?:tests|node_modules)\//
});

Спасибо за любую помощь.


person Daniel Bank    schedule 19.12.2014    source источник
comment
Единственный раз, когда brokenMouseEvents соответствует действительности, это когда удаленный браузер идентифицируется как Safari. Очевидно, что это не должно быть в случае с любой сборкой Chromium. Можете ли вы показать свою конфигурацию стажера, а также поделиться тем, какой сервер WebDriver вы используете?   -  person C Snover    schedule 20.12.2014
comment
@CSnover Я обновил этот вопрос ссылкой на репозиторий GitHub с моей проблемой. Надеюсь, это облегчит воспроизведение этого вопроса. Пожалуйста, дайте мне знать, если это все еще неясно. Спасибо.   -  person Daniel Bank    schedule 13.01.2015


Ответы (1)


Я смог воспроизвести эту проблему. Я не уверен, что проблема связана только с компонентами React, но решение состоит в том, чтобы перед doubleClick() поставить click():

'test singleclick': function () { return this.remote.get('http://localhost:8010/web/test_doubleclick.html') .findById('bar') .sleep(2000) .click() .doubleClick() .end() .sleep(2000) .findById('click-fired') .getVisibleText() .then(function(text) { assert.equal(text, 'Click Fired'); }); }

В документации по intern.js для doubleClick указано, что он:

Двойной щелчок основной кнопкой мыши.

Похоже, это не так. Кажется, либо ошибка в стажере, либо ошибка в документации.

person Ryan Hanks    schedule 16.01.2015