Selenium操作监听

Selenium操作监听

对于UI自动化测试,如果运行测试时,出现接口报错等非常规的问题,无法有效的进行报错的校验和判断,这时候可以通过实现WebDriverEventListener的接口,可以捕获各种事件,例如页面加载、元素点击、输入文本等。
下面是使用WebDriverEventListener的示例

import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.openqa.selenium.support.events.WebDriverEventListener;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.autotest.utils.Selenium.saveFailureScreenShot;

public class PageListener implements WebDriverEventListener {

    private static final Logger log = LoggerFactory.getLogger(PageListener.class);

    @Override
    public void beforeAlertAccept(WebDriver driver) {
		//编写监听 Alert.accept() 操作前的代码
    }

    @Override
    public void afterAlertAccept(WebDriver driver) {
		//编写监听 Alert.accept() 操作后的代码
    }

    @Override
    public void afterAlertDismiss(WebDriver driver) {
		//编写监听 Alert.dismiss() 操作前的代码
    }

    @Override
    public void beforeAlertDismiss(WebDriver driver) {
		//编写监听 Alert.dismiss() 操作后的代码
    }

    @Override
    public void beforeNavigateTo(String url, WebDriver driver) {
        //编写监听 navigate().to(String url). 操作前的代码
    }

    @Override
    public void afterNavigateTo(String url, WebDriver driver) {
		//编写监听 navigate().to(String url). 操作后的代码
    }

    @Override
    public void beforeNavigateBack(WebDriver driver) {
		//编写监听 navigate().back(). 操作前的代码
    }

    @Override
    public void afterNavigateBack(WebDriver driver) {
		//编写监听 navigate().back(). 操作后的代码
    }

    @Override
    public void beforeNavigateForward(WebDriver driver) {
		//编写监听 navigate().forward(). 操作前的代码
    }

    @Override
    public void afterNavigateForward(WebDriver driver) {
		//编写监听 navigate().forward(). 操作后的代码
    }

    @Override
    public void beforeNavigateRefresh(WebDriver driver) {
		//编写监听 navigate().refresh(). 操作前的代码
    }

    @Override
    public void afterNavigateRefresh(WebDriver driver) {
    	//编写监听 navigate().refresh(). 操作后的代码
    	//此示例是切换窗口后,刷新窗口,监听是否有报错弹窗出现
        try {
            WebDriverWait wait = new WebDriverWait(driver, 1);
            WebElement errorPopup = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(s)));
            if (errorPopup.isEnabled()) {
            	//保存报错图片,返回路径
                String addr = saveFailureScreenShot(driver);
                //输出到结果文档Excel中
                ExcelData.outExcle(caseName,stepName,"切换窗口后监听页面出现报错弹窗",addr);
                log.info(stepName + ":切换窗口后监听页面出现报错弹窗");
                driver.quit();
            }
        }catch (Exception e) {
            log.info(stepName + ":切换窗口后监听页面没有出现报错弹窗");
        }
    }

    @Override
    public void beforeFindBy(By by, WebElement element, WebDriver driver) {
		//编写监听 WebDriver.findElement(...), or WebDriver.findElements(...), or WebElement.findElement(...), or WebElement.findElements(...). 操作前的代码
    }

    @Override
    public void afterFindBy(By by, WebElement element, WebDriver driver) {
		//编写监听 WebDriver.findElement(...), or WebDriver.findElements(...), or WebElement.findElement(...), or WebElement.findElements(...). 操作后的代码
    }

    @Override
    public void beforeClickOn(WebElement element, WebDriver driver) {
		//编写 ebElement.click(). 操作前的代码
    }


    @Override
    public void afterClickOn(WebElement element, WebDriver driver) {
    	//编写 WebElement.click(). 操作后的代码
    	//此示例是监听点击后,是否出现报错弹窗
        try {
            WebDriverWait wait = new WebDriverWait(driver, 1);
            WebElement errorPopup = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(s)));
            if (errorPopup.isEnabled()) {
                //保存报错图片,返回路径
                String addr = saveFailureScreenShot(driver);
                //输出到结果文档Excel中
                ExcelData.outExcle(caseName,stepName,"点击后监听页面出现报错弹窗",addr);
                log.info(stepName + ":点击后监听页面出现报错弹窗");
                driver.quit();
            }
        }catch (Exception e) {
            log.info(stepName + ":点击后监听页面没有出现报错弹窗");
        }
    }

    @Override
    public void beforeChangeValueOf(WebElement element, WebDriver driver, CharSequence[] keysToSend) {
		//编写 ebElement.clear(), WebElement.sendKeys(...). 操作前的代码
    }

    @Override
    public void afterChangeValueOf(WebElement element, WebDriver driver, CharSequence[] keysToSend) {
		//编写 WebElement.clear(), WebElement.sendKeys(...). 操作后的代码
    }

    @Override
    public void beforeScript(String script, WebDriver driver) {
		//编写 org.openqa.selenium.remote.RemoteWebDriver.executeScript(String, Object[]) 操作前的代码
    }

    @Override
    public void afterScript(String script, WebDriver driver) {
		//编写 org.openqa.selenium.remote.RemoteWebDriver.executeScript(String, Object[]) 操作后的代码
    }

    @Override
    public void beforeSwitchToWindow(String windowName, WebDriver driver) {
		//编写 WebDriver.TargetLocator.window(String) 操作前的代码
    }

    @Override
    public void afterSwitchToWindow(String windowName, WebDriver driver) {
		//编写 WebDriver.TargetLocator.window(String) 操作后的代码
    }

    @Override
    public void onException(Throwable throwable, WebDriver driver) {
		//编写抛出异常的操作代码
    }

    @Override
    public <X> void beforeGetScreenshotAs(OutputType<X> target) {
		//编写 org.openqa.selenium.TakesScreenshot.getScreenshotAs(OutputType) 操作前的代码
    }

    @Override
    public <X> void afterGetScreenshotAs(OutputType<X> target, X screenshot) {
		//编写 org.openqa.selenium.TakesScreenshot.getScreenshotAs(OutputType) 操作后的代码
    }

    @Override
    public void beforeGetText(WebElement element, WebDriver driver) {
		//编写 WebElement.getText() 操作前的代码
    }

    @Override
    public void afterGetText(WebElement element, WebDriver driver, String text) {
		//编写 WebElement.getText() 操作后的代码
    }

使用监听时,需要将其注册到WebDriver实例中

WebDriver driver = new ChromeDriver();
EventFiringWebDriver driverWithEvents = new EventFiringWebDriver(driver);
PageListener listener = new PageListener();
driverWithEvents.register(listener);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值