Selenium Grid,如何将 WebDriver 与 ThreadSafeSeleniumSessionStorage.session() 结合使用

Posted

技术标签:

【中文标题】Selenium Grid,如何将 WebDriver 与 ThreadSafeSeleniumSessionStorage.session() 结合使用【英文标题】:Selenium Grid, how to utilize WebDriver with ThreadSafeSeleniumSessionStorage.session() 【发布时间】:2012-10-14 23:27:45 【问题描述】:

我正在开展一个项目,该项目涉及大量使用 Selenium WebDriver 和特定的 Firefox 配置文件来查找元素和管理页面。

例如, driver.findElement(By.xpath("//*[@id='foobar']")); driver.manage().refresh();

我正在尝试将 Selenium Grid 实施到我的项目中;但是,随着 Selenium WebDriver 的广泛使用,有没有办法使用特定的 WebDriver 启动 ThreadSafeSeleniumSessionStorage.session() 静态对象?

据我研究,可以通过以下方式从 Selenium 对象中获取 WebDriver:

startSeleniumSession(seleniumHost, seleniumPort, browser, webSite); //Create and start the session() object
//TODO: insert a specific WebDriver into the session() object
WebDriver driver = ((WebDriverBackedSelenium) session()).getWrappedDriver(); //Get the WebDriver from the session() object

【问题讨论】:

【参考方案1】:

我还没有尝试过这段代码,但如果它有效,那么您将拥有一个包含基于 Selenium 的 WebDriver 的对象。据我了解,此功能可用于从 Selenium 1 迁移到 Selenium 2。这不是使 Web 驱动程序线程安全的推荐方法。

WebDriver 默认不是线程安全的。我建议为每个线程实例化一个 WebDriver 实例。

【讨论】:

您能否提供一些关于如何进行此操作的见解? 例如,如果您想并行化您的测试类,您可以为每个类获取一个 WebDriver...【参考方案2】:

您可以查看 ThreadSafeSeleniumSessionStorage 类的实现,并使用相同的逻辑创建一个新的 ThreadSafeWebdriverSessionStorage。你不能吗?来源是here

它使用 ThreadLocal 类。实施起来应该不难。

【讨论】:

以上是关于Selenium Grid,如何将 WebDriver 与 ThreadSafeSeleniumSessionStorage.session() 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 Selenium Grid 将文件从本地计算机传输到远程 Web 服务器来上传文件

如何使用Selenium-Grid

如何使用Selenium-Grid

测试人员如何搭建Selenium-Grid2环境(参考Java)

Python - Selenium - 如何使用浏览器快捷方式

Python+Selenium笔记:配置selenium Grid