无法在selenium

时间:2018-02-09 06:01:40

标签: java selenium-webdriver popup

我想在自动化期间不断检查是否弹出来然后关闭它,否则继续进行测试用例。

我已经在互联网上阅读了很多答案,但它对如何不断检查弹出窗口没有帮助。

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

enter image description here

1 个答案:

答案 0 :(得分:1)

为了每次都进行检查,不重复每种方法中的代码,我会implement my own WebDriver

这样做,您可以override每个WebDriver方法并执行检查和处理基本级别的弹出窗口。

示例:

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创建的接口。这是可能的,但我认为成本太高。

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

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

方法get()处理创建WebDriver。

使用方法示例:

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