【发布时间】:2017-07-13 20:34:44
【问题描述】:
我正在使用这些工具和概念构建一个自动化测试框架 -
- Selenium WebDriver
- 黄瓜(用于 BDD)
- 春季启动
- 页面对象模型
- PageFactory 模式
一切正常,我对自己构建的东西感到满意。在 Page Object Model 之后,我创建了 PageObject 类,它们基本上是实际网页的模型。我也在使用 PageFactory 模式来自动实例化 WebElements。
我使用了 Spring Boot,非常棒。我所说的出色是指在整个应用程序中自动注入配置、在执行 Cucumber 测试时实现步骤定义类之间共享测试世界所需的依赖注入,以及如果没有它,实现其他目标会有点乏味。
鉴于背景,现在让我们来回答我的问题。
我希望我的页面对象是 Spring 管理的 bean/组件。我正在使用构造函数中的PageFactory.initElements(WebDriver driver, Object page) 方法初始化我的页面对象。据我所知,如果页面对象在页面实际加载到浏览器之前被初始化,那么任何对其 web 元素调用操作的尝试都会导致StaleStateException。正确的?那么,如果我将我的页面对象设为 Spring 托管 bean,我该如何控制其 Web 元素的初始化呢?我可以从构造函数中删除 PageFactory 的初始化方法,并将其放入其他方法中,稍后我可以调用它来实例化它。但我想知道是否有更好的方法。
该程序应该能够在 Cucumber 的 Step Definition 类中自动装配页面对象,但是只要在浏览器中加载实际页面或调用某些操作方法与 Web 元素交互时,就应该实例化这些对象的元素。
如果您遵循 Page Object Model 和 PageFactory,制作 PageObjects spring bean 是个好主意吗?
【问题讨论】:
-
我没有使用java,但我认为页面对象的初始化与
StaleStateException无关,据我所知,如果你找到元素,你会得到这个异常(结果在一个对象中),然后页面重新加载/更改,您正在尝试对该对象调用操作。您需要确保页面在查找元素和使用它对其调用操作之间不会更改/重新加载。 -
检查一下看看是否有帮助peterkedemo.wordpress.com/2013/03/30/…
-
@lauda 你是绝对正确的。而且,感谢您将我重定向到该博客。它看起来真的很有希望。我将尝试这种方法。
-
您找到问题的合理答案了吗?你最终使用了彼得的方法吗?
标签: spring selenium selenium-webdriver automated-tests pageobjects