java - 如何用java处理Selenium弹出窗口

标签 java selenium-webdriver alert popupwindow

我尝试了几种选项来使用 Selenium 处理弹出窗口并填充字段值。但它不适用于以下代码。

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>
  • 如何处理弹出窗口并填写字段?
  • 另外,到底如何关闭警告窗口?

最佳答案

弹出窗口是 HTML 元素,而不是使用 driver.switchTo().alert() 的模式对话框。
要输入电子邮件,您必须等待该元素,并且 sleep 是一个糟糕的选择。下面的代码使用WebDriverWait等待电子邮件的可见性,这是最佳实践。
另外,使用 //*[@id=\"loginBox\"]/div[2]/div/div/div[1]/div 之类的选择器也不是一个好习惯。您可以找到一些有关选择器最佳实践的有用信息 here .

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();

关于java - 如何用java处理Selenium弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58364363/

相关文章:

javascript - JavaScript 中的警报功能不起作用

java - 从对象所在的类创建对象

java - 仅从 txt 文件中读取整数并将每个找到的值相加

c# - 使用 Selenium 在现有浏览器 session 中打开一个新选项卡

javascript - browser.get() 不起作用

jquery - 快要疯了。使用 jquery 检查复选框时的简单警报

javascript - IE 的奇怪 ajax 问题

java - jfreechart xyplot 设置小区域背景色

java - JNDI 查找失败(NameNotFoundException)

c# - 如何使用 Selenium Webdriver (C#) 获取页面名称?