Selenium-webdriver, я не могу перейти к модальному окну

#javascript #selenium #automated-tests

#javascript #селен #автоматизированные тесты

Вопрос:

Я новичок в автоматическом тестировании. Столкнувшись с такой проблемой, ранее в тесте я захожу в окно Iframe, чтобы ввести данные «тестовой карты». Вместо «страницы успеха» отображается модальное окно, на которое мне нужно нажать. Селен ругается.

…………..

 await driver.switchTo().frame(driver.findElement(By.xpath('//*[@id="solid-payment-form-iframe"]'))).then.....
 

…………………………

 `await button46.click().then(async function() {
  bot.sendMessage(-100********, land "nTest completed!!✅");
  console.log(button46.click,'SubmitButton - done');
  
  return true//it existed
})  
await driver.switchTo().defaultContent();
 const number = await driver.wait(
  until.elementLocated(By.xpath('//*[@id="specialOffer"]/div/div[2]/div[1]/a'))
  // (By.xpath('//*[@id="specialOffer"]/div/div[2]/div[1]/a'))
  , 20000).then(number => {
return driver.wait(
  until.elementIsEnabled(number), 20000)})await number.click();`
   
 

Это то, что пишет консоль:
ElementClickInterceptedError: element click intercepted: Element <a href="************************************* is not clickable at point (960, 536). Other element would receive the click: <iframe id="solid-payment-************************

Selenium webdriver javascript удаленный сервер — selenoid(aerokube)

Ответ №1:

Чтобы щелкнуть элемент с помощью selenium element.click , элемент должен быть видимым и интерактивным, но ваш элемент может находиться за пределами видимой области или за диалоговым окном. Попробуйте щелкнуть, введя javascript. Я работал с версией Selenium на Python, поэтому смотрите Код python и конвертируйте в соответствии с вашими потребностями:

 driver.execute_script("arguments[0].click()", button46)
 

Комментарии:

1. мне нужно щелкнуть элемент ‘number’, если я удалил await driver.switchTo().defaultContent(); у меня следующая ошибка: ошибка времени ожидания: ожидание нахождения элемента с помощью (xpath, //*[@id=»specialOffer»]/div/ div[2]/div[1] / a) Время ожидания истекло после 20070 мс

2. Вы сказали, что удаление await driver.switchTo().defaultContent(); вызывает ошибку, тогда не удаляйте ее, просто получите элемент таким образом и после этого введите javascript для нажатия кнопки. Возможно, вам потребуется просмотреть документы для вашей текущей версии selenium.

3. driver.execute_script("arguments[0].click()", number) вместо number.click()

4. dropmefiles.com.ua/en/3xUR42MX

5. Прочитайте 2-й комментарий еще раз, вы не должны комментировать строку 880, поскольку вы сказали, что удаление этой строки вызывает ошибку.

Ответ №2:

ИСПРАВИТЬ ПРОБЛЕМУ:

    await driver.sleep(5000)
  const number1 = await driver.wait(until.elementLocated(By.xpath('//*[@id="specialOffer"]/div/div[2]/div[1]/a')))
  await driver.executeScript("arguments[0].click()", number1)```
 

Комментарии:

1. Пожалуйста, рассмотрите возможность добавления объяснения к вашему ответу, чтобы все могли его понять