He estado intentando hacer clic en un botón en una ventana emergente con selenio, pero recibo el siguiente error:
object [HTMLDivElement] has no size and locationLo he intentado de la manera normal, con solo hacer clic, ya que está en la ventana gráfica y estoy esperando que la página se cargue por completo:
let pressCookieButton = await driver.findElement(By.xpath('//a[@class="btn-actiune btn-actiune--principal"]/..')) await pressCookieButton.click();Pero esto no funciona. Dice
Element not interactibleLuego, traté de hacer clic usando acciones:
let pressCookieButton = await driver.findElement(By.xpath('//a[@class="btn-actiune btn-actiune--principal"]/..')) const actions = driver.actions({ async: true }); await actions.click(pressCookieButton).perform();pero obtengo:
object [HTMLDivElement] has no size and locationEl HTML en el que intento hacer clic es el siguiente:
<div class="col-md-4 col-sm-4 col-xs-12"> <a href="javascript:;" onclick="modCookies.updatePermisiuniCookies('toate');" class="btn-actiune btn-actiune--principal">Accept toate cookie-urile</a> </div>A continuación se muestra el código completo:
const {Builder} = require('selenium-webdriver'); const {By} = require('selenium-webdriver'); (async function helloSelenium() { let driver = await new Builder().forBrowser('chrome').build(); try{ await driver.get('https://www.imobiliare.ro/vanzare-apartamente/timisoara/matei-basarab/apartament-de-vanzare-3-camere-XCB61020C'); await driver.sleep(7000); console.log("clicking") let pressCookieButton = await driver.findElement(By.xpath('//a[@class="btn-actiune btn-actiune--principal"]/..')) const actions = driver.actions({ async: true }); await actions.click(pressCookieButton).perform(); //findElement(By.className('btn-actiune btn-actiune--principal')); await driver.sleep(10000); await pressCookieButton.click(); }catch(error){ console.log(error) await driver.sleep(5000); // await driver.quit() } })();Como puede ver en el GIF a continuación, el xpath coincide con dos elementos y al usar driver.findElement está seleccionando el primero, mientras que el correcto es el segundo.
Por lo tanto, debe usar driver.findElements en lugar de driver.findElement y luego seleccionar el segundo elemento, o usar un selector que apunte solo al elemento correcto, como
driver.findElement(By.cssSelector('div[class*="vizibil-informare"] a[class*="principal"]'))