Selenium 如何定位一闪而退的弹窗且获取该弹窗的文本?

获取页面弹窗,首先要定位到相对应的元素,常见的是alert弹窗,这种是相对简单的,切换到alert,并且返回当前打开的alert对象,使用switch_to.alert()方法定位到alert/confirm/prompt。然后使用text/accept/dismiss/send_keys按需进行操做:

alert = driver.switch_to_alert()
alert.accept()        # 点击确认按钮
alert.dismiss()      # 点击取消按钮
alert.text()        # 返回alert/confirm/prompt中的文字信息
alert.send_keys("hello")  # 向prompt中输入文字

但是对于弹出提示弹窗后3秒就自动关闭的弹窗,一闪而过的弹窗就不是alert弹窗,自然也就不能用alert方法去获取弹窗文本信息。

Selenium如何定位一闪而退的弹窗且获取该弹窗的文本

selenium如何定位一闪而退的弹窗且获取该弹窗的文本?

针对这种一闪而退的弹窗如何去定位元素?如何去获取该弹窗的文本信息?可以这样去做:

如何定位一闪而退的弹窗元素?

当操作成功后,弹出该弹窗后,首先将鼠标悬停在弹窗上,然后再右键选择检查元素,即刻获取该元素。(将鼠标悬停在该种弹窗上,该弹窗就不会一闪而退,如果不将鼠标悬停在弹窗上而直接去定位该弹窗元素,过3秒该弹窗消失后,该元素也将消失。)

如何获取该弹窗的文本信息?

同上,先将鼠标悬停在该弹窗上,然后去定位元素,去该获得该元素的文本信息。

该方法的脚本以java+selenium为例,如下:

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import com.doctorsAdvice.UI.AutoLogger;

// 悬停到指定元素
public void hover(String xpath) {
  try {
    WebElement element = driver.findElement(By.xpath(xpath));
    Actions act = new Actions(driver);
    act.moveToElement(element).build().perform();
    AutoLogger.log.info("悬停到指定元素");
  } catch (Exception e) {
    AutoLogger.log.error(e,e.fillInStackTrace());
    AutoLogger.log.info("元素悬停失败!");
  }
}

//获取闪退提示窗体信息,与期望文本信息作对比
public void alertText(String xpath, String target) {
  hover(xpath);
  try {
    WebElement ele = driver.findElement(By.xpath(xpath));
    String alerttext = ele.getText();
    if( alerttext.contains(target) ) {
      AutoLogger.log.info("测试成功!");
    } else {
      AutoLogger.log.info("测试失败!"); 
    }
  } catch (Exception e) {
    AutoLogger.log.info("未找到指定元素!!!");
    System.out.print(e);
  }
}

如何使用的是python+selenium的思路也是如此,先将鼠标悬停在该弹窗上,然后去定位元素,去该获得该元素的文本信息。



我的回答