我想在自动化期间不断检查是否弹出来然后关闭它,否则继续进行测试用例。
我已经在互联网上阅读了很多答案,但它对如何不断检查弹出窗口没有帮助。
我可以构建一个函数来检查它,然后在每行代码之后调用该函数不是一个好习惯,所以寻找一些简短而有效的解决方案。
答案 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);