Conductor del transportador + chrome: El elemento no es clickable en el punto


Hola Estoy teniendo algunos problemas para conseguir una prueba básica de transportador para trabajar.

Mi configuración:

  • Utilizo requirejs para iniciar angular usando angular.bootstrap (), no la ng-app attr. Según protractor docs, esto no es compatible desde el principio, pero parece funcionar bien para pruebas que no implican hacer clic.
  • Transportador conf.json:

    "use strict";
    exports.config = {
        specs: '../E2ETests/**/*.js',
        chromeOnly: true,
        getPageTimeout: 30000,
        allScriptsTimeout: 30000
    }
    
  • Utilizo algunos plugs jquery de terceros que envuelvo en directivas, sospecho que estos podrían ser parte de cuestión.

La prueba:

"use strict";
describe('When clicking should add stuff', function () {
    var ptor;
    beforeEach(function () {
        browser.get('https://localhost/myApp');
        ptor = protractor.getInstance();
    });
    it('add stuff', function () {
        // If I comment this, the test pass. 
        element(by.id('add-stuff-button')).click();
        // This does not matter fails on the line above..
        expect(browser.getTitle()).toBeDefined();
    });
});

El error:

UnknownError: unknown error: Element is not clickable at point (720, 881). Other element would         receive the click: <div class="col-md-5 col-md-offset-5">...</div>
(Session info: chrome=37.0.2062.124)
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64)

Pensamientos

El chromedriver encuentra el botón, porque si cambio el id se queja de que no se encuentra ningún elemento. Así que creo que el problema es que el botón se mueve desde su posición inicial. Como la función element(***) debe esperar a que angular se haga, sospecho que son los complementos de terceros que podrían interferir, ya que podrían no usar los datos de obtención de angular api sucesivamente. Así que angular creo que está hecho, pero luego el enchufe de terceros rellena y mueve cosas alrededor.

Alguna idea de qué hacer? Si los enchufes de terceros es el problema, ¿puedo decirle de alguna manera a angular que están sucediendo cosas de terceros y luego decirle cuando esté listo?

Thx Br Twd

Author: twDuke, 2014-10-06

13 answers

Debe establecer el tamaño de la ventana en su archivo de configuración

onPrepare: function() {
  browser.manage().window().setSize(1600, 1000);
}
 22
Author: Gal Margalit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-21 17:31:50

Siguiente funcionó bien para mí:

browser.actions().mouseMove(element).click();
 15
Author: Aman Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-25 11:24:38

Esto sucede si la ventana de Chrome es demasiado pequeña, intente agregar dentro del beforeEach

browser.driver.manage().window().setSize(1280, 1024);
 12
Author: originof,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-06 10:07:29

O simplemente use la clase Actions:

browser.actions().mouseMove(elem).click().perform();
 10
Author: Raul Huluban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 18:03:05

Tal vez no sea aplicable en tu caso, pero me he encontrado con el mismo problema y basándome en la respuesta de Milena he estado buscando otro elemento que oscurezca mi botón (en mi caso, un menú desplegable en la parte superior derecha de mi pantalla).

Parece ser el mensaje de notificación Conectado a Browser Sync enviado por browsersync, lanzado por Gulp. El mensaje desapareció después de un corto tiempo, pero después de mi llamada onClick ().

Para eliminar la notificación, en mi gulpfile, he añadido el parámetro notify: false al inicializar browsersync:

browserSync.init(files, {
    server: {
        baseDir: "dist",
        index: "index.html"
    },
    notify: false
});
 4
Author: Emmanuel P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:38

Soluciono este problema usando el tiempo de reposo del navegador.

browser.driver.sleep(3000)

Antes de dar clic botón

 4
Author: Anik Saha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-07 09:28:01

Tuve el mismo error y simplemente ajustar el tamaño de la pantalla no lo solucionó para mí.

Tras una inspección posterior, parecía que otro elemento estaba oscureciendo el botón, por lo tanto, la prueba de Selenio falló porque no se hizo clic en el botón (y no se pudo hacer). Tal vez es por eso que ajustar el tamaño de la pantalla lo arregla para algunos?

Lo que arregló la mina fue eliminar el otro elemento (y luego ajustar el posicionamiento de la misma).

 2
Author: Milena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-20 15:35:31

Esto funciona mejor que especificar el tamaño de la ventana, en caso de que la prueba necesite ejecutarse en varias pantallas.

browser.manage().window().maximize();

 1
Author: Karanvir Kang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-05 15:12:42

Tuvo el mismo problema, pero no estaba relacionado con el tamaño de la ventana, pero tuvo que esperar a que ngAnimation terminara.

Así que tuve que esperar hasta que el elemento era clickable con.

    const msg = 'Waiting for animation timeout after 1s';
    const EC  = new protractor.ProtractorExpectedConditions();
    await browser.wait(EC.elementToBeClickable(model.elements.button.checkCompliance), 1000, `${msg} panel`);
    await model.elements.button.checkCompliance.click();

@note - Estoy usando la función async/await node 8, podrías convertir esto en Promesas regulares. También usando ProtractorExpectedConditions en lugar de ExpectedConditions véase la documentación

 1
Author: fredtma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-12 10:10:42

También puede intentar desactivar cualquier herramienta de depuración que pueda estar utilizando. Estaba usando Laravel y debugbar y tuve que establecer APP_DEBUG en false.

 0
Author: xtrahelp.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-18 06:56:15

De La respuesta de Gal Malgarit ,

Debe establecer el tamaño de la ventana en su archivo de configuración

onPrepare: function() {
  browser.manage().window().setSize(1600, 800);
}

Si todavía no funciona, debe desplazarse a la ubicación del elemento

browser.executeScript('window.scrollTo(720, 881);');
element(by.id('add-stuff-button')).click();
 0
Author: patronaviera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:38

De otra manera, puedes probar esto:

this.setScrollPage = function (element) {

    function execScroll() {
        return browser.executeScript('arguments[0].scrollIntoView()',
            element.getWebElement())
    }

    browser.wait(execScroll, 5000);
    element.click();
};
 0
Author: Tayguara Dias Reis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-21 20:22:43

Tenga en cuenta que esto fue causado en algún momento por una barra de navegación superior o barra de navegación inferior / barra de advertencia de cookies que cubre el elemento. Con angular 2, al hacer clic se desplaza hasta que el elemento está solo en la página. Eso significa que al desplazarse hacia abajo para hacer clic en algo, si hay una navegación inferior, entonces esto obstruirá el clic. Del mismo modo, al desplazarse hacia arriba puede ser cubierto por la navegación superior.

Por ahora, para evitar el desplazamiento hacia arriba, estoy usando lo siguiente:

browser.refresh();
browser.driver.sleep(3000);

Me aseguré de eliminar la barra inferior haciendo clic para cerrarla antes de que comenzara la prueba.

 0
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-01 15:19:29