gpt4 book ai didi

Selenium Webdriver 连接池

转载 作者:行者123 更新时间:2023-12-02 21:40:03 25 4
gpt4 key购买 nike

我的应用程序已实现自动化,其中包含 70 多个脚本,并针对 Selenium Grid 运行,Selenium Grid 也对其他应用程序开放。

我的问题是,WebDriver 有连接池 api 吗?这样我就可以在我的脚本中有效地重新使用 webdriver 对象。我不希望我的脚本等待 IE 插槽,如果无法获取 IE 插槽,就会因为超时错误而失败。

此外,我相信它会提高脚本执行的性能。

谢谢。

最佳答案

我们的测试非常而且速度非常快,以至于网络驱动程序的实例化时间比测试要长。因此,我们按照@premganz 的建议,汇集了网络驱动程序,但使用的是 Apache Commons Pool。我们考虑编写自己的 webdriver 列表管理池,但发现使用完善的 Apache 池易于实现、健壮且可扩展。我们的测试同时运行超过 80 个 WebDriver。

WebdriverFactory 示例:

public class WebdriverFactory extends BasePooledObjectFactory<RemoteWebDriver> {

private FirefoxOptions firefoxOptions = new FirefoxOptions();

public WebdriverFactory(boolean headless, int implicit_timeout_seconds) {
super();
firefoxOptions.setHeadless(headless)
.setPageLoadStrategy(PageLoadStrategy.EAGER)
.setLogLevel(FirefoxDriverLogLevel.ERROR);
}

@Override
public RemoteWebDriver create() {
FirefoxDriver webDriver = new FirefoxDriver(firefoxOptions);
webDriver.manage()
.timeouts()
.implicitlyWait(implicit_timeout_seconds, TimeUnit.SECONDS);
return webDriver;
}

/**
* Use the default PooledObject implementation.
*/
@Override
public PooledObject<RemoteWebDriver> wrap(RemoteWebDriver webDriver) {
return new DefaultPooledObject<>(webDriver);
}

/**
* When a webdriver is returned to the pool, clean it up.
*/
@Override
public void passivateObject(PooledObject<RemoteWebDriver> webDriver) {
WebDriver driver = webDriver.getObject();
try {
// close all tabs except the first
String originalHandle = driver.getWindowHandle();
for(String handle : driver.getWindowHandles()) {
if (!handle.equals(originalHandle)) {
driver.switchTo().window(handle);
driver.close();
}
}
driver.switchTo().window(originalHandle);
} catch (Exception e) {
// ...
} finally {
// ensure session data is not re-used
driver.manage().deleteAllCookies();
}
}

@Override
public boolean validateObject(PooledObject<RemoteWebDriver> webDriver) {
return true;
}

@Override
public void activateObject(PooledObject<RemoteWebDriver> webDriver) throws Exception {
}
}

关于Selenium Webdriver 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050433/

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