【问题标题】:Java: Force Client of Method to Execute Code Before ReturningJava:强制方法的客户端在返回之前执行代码
【发布时间】:2018-06-25 22:31:49
【问题描述】:

我有一堆 WebDriver 配置文件(我们称它们为 x、y 和 z),我需要选择一个随机配置文件来执行某些操作。我们将动作称为 A、B 和 C。

在我的课堂WebDriverManager 中,我定义了三种方法:doA()doB()doC()。每种方法都会选择一个随机配置文件,该配置文件 a) 当前未使用,并且 b) 有资格执行给定操作。

如果client 调用doA(), doB() or doC(),他们将获得一个WebDriver 有资格执行操作A、B 或C 的配置文件。doA(), doB() or doC() 也会将所述配置文件的状态设置为 UNAVAILABLE(通过 props 文件)这样配置文件将不会被返回用于不同的操作(或者如果从不同的线程调用相同的操作),直到它再次可用。

我的问题是,只有当客户将所述配置文件用于其预期目的时,该配置文件才会可用。

由于doA()等方法将通过许多客户端访问,我如何强制doA()doB()doC()client在它之前将WebDriver配置文件的状态设置为可用回报?如果将来某个时候我忘记将给定配置文件的状态更改为可用(在客户端),它将永远保持不可用,这将导致很多问题。

那么我如何保证调用doA()doB()doC() 的任何方法在返回之前都将配置文件状态设置为可用?

附言

This 是我在 SO 上找到的最接近的问题,但我相信这并不能解决我的问题,因为我无法控制实际的 WebDriver 类,我只是希望每个上述方法的客户端执行某个操作在他们回来之前。

AutoClosable 也不起作用,因为我没有尝试关闭类的特定实例(我不控制类),我希望某个方法的客户端在它之前执行特定的方法或代码完成。

【问题讨论】:

  • 也许传入 Consumer<WebDriver> 并要求客户在 lambda/方法参考中做他们需要的一切?

标签: java selenium-webdriver webdriver try-with-resources autocloseable


【解决方案1】:

从听起来像是您定义的方式来看,WebDriverManager 的当前实例应该跟踪当前测试使用的配置文件。如果还没有,您将不得不编写此代码。在测试清理期间,调用 WebDriverManager.SetProfileAvailable() 之类的东西,将使用的配置文件设置回 AVAILABLE。

【讨论】:

  • WebDriverManager 如何跟踪/知道客户端何时完成? WebDriverManager 只知道它何时被调用,而不是客户端返回时。
  • 您的测试会知道何时完成。我不知道您使用的是什么框架,但如果您使用 TestNG,它具有@AfterTest 的概念。您创建一个希望在每次测试后运行的方法,使用属性@AfterTest 对其进行标记,然后在该方法中调用WebDriverManager.SetProfileAvailable()。这是TestNG docs 的链接,可让您更好地了解其工作原理。您可以将其他注释用于不同的情况。还有其他框架,例如JUnit,你可以使用。
猜你喜欢
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多