Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

204
Vistas
NightwatchJs, espere a que el ciclo recopile una matriz de identificadores de elementos de forma sincrónica y continúe

Necesito recopilar una serie de identificadores de casilla de verificación que se encuentran dentro de un OL y luego usar esa matriz de identificadores más tarde para elegir uno al azar, el problema que tengo es que debido a que todo se ejecuta en las devoluciones de llamada de forma asíncrona, mi matriz siempre está vacía en el momento en que el código se ejecuta debajo de las llamadas de vigilancia nocturna.

Aquí está mi código para que pueda ver lo que quiero decir:

 module.exports = { 'test-range-filter': function(browser) { // array to hold the input (checkbox) element ids let checkboxElementIds = []; browser.url(browser.launch_url + '/e-liquids/flavour-types/apple'); // loop the li elements browser.elements('css selector','#narrow-by-list > div:nth-child(3) > div.filter-options-content > div > ol > li',function(foundElements){ // loop each of the li elements foundElements.value.forEach(function(liElement){ // get the object keys let liElementKeys = Object.keys(liElement); // get the li element id using the keys[0] let liElementId = liElement[liElementKeys[0]]; // use the li element id, to find the input (checkbox) inside of it browser.elementIdElement(liElementId, 'css selector', 'input', function(inputElement) { // store the element id in the array checkboxElementIds.push(inputElement.elementId); }) }) }); console.log("CHECKBOX ELEMENTS",checkboxElementIds) } };

Debido a que las llamadas antes de console.log("CHECKBOX ELEMENTS",checkboxElementIds) se ejecutan de forma asíncrona, mi matriz checkboxElementIds siempre está vacía en el momento en que se ejecuta parte del código, la matriz se llena, puedo ver al agregar esto:

 setTimeout(function() { console.log("CHECKBOX ELEMENTS", checkboxElementIds) },5000);

Lo que da esta salida:

 CHECKBOX ELEMENTS [ 'f37d1d8f-9575-4f97-b359-db7d357b4ff0', 'dcc155ca-19ea-4cf0-be6c-413302e55888', 'fe0c4ce8-0b07-4418-bd2f-3de720bcbfbb', 'ae77658f-be3c-47af-ad3d-23db4a327d3b', '34001645-b33c-4a27-ba62-259c5561ee09', '50241232-5799-4921-9e5d-5181e47e05f3', 'f26a2208-08b3-4ed4-a2ed-3d6d850d0553', '4653ad6d-514a-4ca8-b55d-9a613d88a296', 'f4c820b6-8d60-4fd7-943c-465080feddcc' ]

No quiero usar un temporizador, ya que no se sabe cuánto tiempo llevará el proceso cada vez, pero no estoy seguro de cómo hacer que se ejecute el código de forma sincrónica para poder continuar hacia abajo y seleccionar uno al azar.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Para responder a mi propia pregunta, en caso de que ayude a alguien, pensé que podía hacerlo de la siguiente manera:

 'test-range-filter': async function(browser) { // array to hold the input (checkbox) element ids let checkboxElementIds = []; browser.url(browser.launch_url + '/e-liquids/flavour-types/apple'); let foundElements = await browser.elements('css selector','#narrow-by-list > div:nth-child(3) > div.filter-options-content > div > ol > li'); // loop each of the li elements for (let e in foundElements){ // get the li element let liElement = foundElements[e]; // get the object keys let liElementKeys = Object.keys(liElement); // get the li element id using the keys[0] let liElementId = liElement[liElementKeys[0]]; // use the li element id, to find the input (checkbox) inside of it let inputElement = await browser.elementIdElement(liElementId, 'css selector', 'input'); // get the object keys of the input element let inputElementKeys = Object.keys(inputElement); // get the input element id using keys[0] let inputElementId = inputElement[inputElementKeys[0]]; // store the element id in the array checkboxElementIds.push(inputElementId); } console.log("IDS",checkboxElementIds) },
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda