gpt4 book ai didi

java - 无法管理 Selenium 中的随机弹出窗口

转载 作者:行者123 更新时间:2023-12-02 11:39:14 25 4
gpt4 key购买 nike

我想在自动化过程中不断检查是否弹出窗口出现,然后将其关闭,否则继续进行正在进行的测试用例。

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

我可以构建一个函数来检查它,但在每一行代码之后调用该函数并不是一个好的做法,因此需要寻找一些简短且有效的解决方案。

enter image description here

最佳答案

为了每次都进行检查,而不是在每个方法中重复代码,我将实现我自己的 WebDriver

这样做,您可以覆盖每个 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 接口(interface)中实现的,因此您必须以某种方式创建接口(interface),覆盖由 selenium 创建的接口(interface)。这是可能的,但我认为成本太高。

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

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

方法 get() 处理创建 WebDriver。

如何使用示例:

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

关于java - 无法管理 Selenium 中的随机弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48699632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com