无法管理硒中的随机弹出窗口 [英] Unable to manage random popup in selenium

查看:56
本文介绍了无法管理硒中的随机弹出窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在自动化过程中不断检查,如果弹出窗口出现则关闭它,否则继续进行中的测试用例.

I want to check constantly during automation that if popup came then close it otherwise continue with ongoing test cases.

我在互联网上阅读了许多可用的答案,但它对如何不断检查弹出窗口无济于事.

I have read many answers available on internet but it does not help about how to check constantly for popup.

我可以构建一个函数来检查它,但是在每一行代码之后调用该函数并不是一个好习惯,所以寻找一些简短有效的解决方案.

I can build one function to check it but then to call that function after each line of code would be not good practice so looking for some short and valid solution.

推荐答案

为了每次都保持检查,不重复每个方法的代码,我会实现自己的WebDriver

In order to keep checking every time, without repeating the code in every method, I would implement my own WebDriver

这样做,您可以覆盖每个 WebDriver 方法并在最基础级别执行检查和处理弹出窗口.

Doing so, you can override every WebDriver method and perform checking and handling the pop up at the very base level.

示例:

public class Selenium implements WebDriver {
private static HashMap<Thread, WebDriver> webdriverPool = new HashMap<Thread, WebDriver>();
private WebDriver driver = null;

private Selenium(WebDriver driver) {
    this.driver = driver;
}

public static Selenium get() {
    WebDriver currentDriver = webdriverPool.get(Thread.currentThread());
    if (currentDriver != null) return new Selenium(currentDriver);
    else {
        //initialize WebDriver like this
        //add switches etc. Return an instance of our Custom class wrapping the WebDriver
        return new Selenium(new FirefoxDriver());
    }
}

@Override
public void close() {
    driver.close();
}

@Override
public WebElement findElement(By arg0) {
    handlePopUp();
    return driver.findElement(arg0);
}

@Override
public List<WebElement> findElements(By arg0) {
    handlePopUp();
    return driver.findElements(arg0);
}

@Override
public void get(String arg0) {
    driver.get(arg0);
    handlePopUp();
}

@Override
public String getCurrentUrl() {
    return driver.getCurrentUrl();
}

@Override
public String getPageSource() {
    return driver.getPageSource();
}

@Override
public String getTitle() {
    return driver.getTitle();
}

@Override
public String getWindowHandle() {
    return driver.getWindowHandle();
}

@Override
public Set<String> getWindowHandles() {
    return driver.getWindowHandles();
}

@Override
public Options manage() {
    return driver.manage();
}

@Override
public Navigation navigate() {
    return driver.navigate();
}

@Override
public void quit() {
    driver.quit();
}

@Override
public TargetLocator switchTo() {
    return driver.switchTo();
}

public void click(WebElement element) {
    handlePopUp();
    element.click();
}

public void click(By by) {
    handlePopUp();
    this.findElement(by).click();
}

public void sendKeys(WebElement element, String keys) {
    handlePopUp();
    element.sendKeys(keys);
}

public void sendKeys(By by, String keys) {
    handlePopUp();
    this.findElement(by).sendKeys(keys);
}

private void handlePopUp() {
    //your custom method
}

要记住的事情很少.如果您还想覆盖 click()sendKeys() 方法,则必须在某处实现它们.由于这些方法是在 WebElement 接口中实现的,您必须以某种方式创建接口,覆盖由 selenium 创建的接口.这是可能的,但我认为成本太高了.

There are few things to remember. If you want to also override click() and sendKeys() methods, you have to implement them somewhere. Since these methods are implemented in WebElement interface, you would have to create interfaces somehow, overriding the ones created by selenium. That's possible but too costly I think.

我将 click()sendKeys() 添加到 Selenium 类.

I added click() and sendKeys() to Selenium class.

您必须使用 selenium.click(element); 来处理弹出窗口,而不是调用 element.click();.

Instead of invoking element.click(); you would have to use selenium.click(element); in order to handle the pop up.

方法 get() 处理创建 WebDriver.

The method get() handles creating the WebDriver.

使用方法示例:

Selenium selenium = Selenium.get();
WebElement element = selenium.findElement(By.id("id"));
selenium.click(element);

这篇关于无法管理硒中的随机弹出窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆