Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

198
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda