Как справиться с Selenium Pop-up с помощью Java - PullRequest
0 голосов
/ 13 октября 2019

Я пробовал несколько вариантов обработки всплывающего окна с помощью Selenium и заполнения значений полей. Но он не работает с приведенным ниже кодом.

Селена Java-код:

driver.findElement(By.xpath("//*[@id=\"loginBox\"]/div[2]/div/div/div[1]/div")).click();
Thread.sleep(2000);

Alert alert = driver.switchTo().alert();
Thread.sleep(3000);

driver.findElement(By.name("Email")).sendKeys("xxx@yyy.com");
Thread.sleep(2000);

alert.accept();

HTML:

<div class="content">
 <form class="ui form">
  <div class="field">
   <label for="Email">Email</label>
    <div view="horizontal" class="ui right corner labeled input">
     <div class="ui label label right corner">
      <i aria-hidden="true" class="asterisk icon">
      </i>
     </div><input name="Email" id="Email" placeholder="Please enter email address" type="email" value="">
    </div>
   </div>
  • Как я могу обработать всплывающее окно и заполнить поле?
  • Кроме того, в конце концов, как закрыть окно предупреждения?

1 Ответ

0 голосов
/ 13 октября 2019

Всплывающее окно - это элемент HTML, а не модальное диалоговое окно для использования driver.switchTo().alert().
Чтобы ввести электронную почту, нужно дождаться элемента, и для этого sleep неудачный выбор. Приведенный ниже код ожидает появления email с использованием WebDriverWait , это лучшая практика.
Кроме того, не рекомендуется использовать //*[@id=\"loginBox\"]/div[2]/div/div/div[1]/div как селекторы. Вы можете найти некоторую полезную информацию о передовой практике для селекторов здесь .

import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

// ...

WebDriverWait wait = new WebDriverWait(driver, 10);

driver.findElement(By.xpath("//*[@id=\"loginBox\"]/div[2]/div/div/div[1]/div")).click();

WebElement email = wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("Email")));
email.sendKeys("xxx@yyy.com");
email.submit();
...