Selenium页面对象模型中如何处理多页面公共Web元素?
关于公共Web元素的页面对象类设计建议
当然应该创建一个单独的公共页面对象类来封装这些全局通用的Web元素,这完全符合页面对象模型(POM)的设计原则,具体原因和实现思路如下:
- 减少代码冗余:如果每个页面类都重复定义这些公共元素(比如顶部导航栏、页脚、全局搜索框),后续修改元素定位时要逐一修改所有页面类,而用公共类只需要维护一处即可,大幅降低维护成本。
- 提升代码可读性:其他页面类通过继承或组合公共类,能清晰区分全局通用元素和当前页面独有元素,代码结构更直观。
- 符合单一职责原则:公共类专门负责全局通用元素及对应操作(比如点击首页按钮、执行全局搜索),每个页面类只需专注自身页面的元素和业务逻辑。
具体实现思路
- 先创建基础公共类,比如
CommonElementsPage,封装所有全局相同的元素和操作方法:
// 示例Java代码 public class CommonElementsPage { // 全局搜索框 @FindBy(id = "global-search-input") private WebElement globalSearchInput; // 首页导航按钮 @FindBy(css = ".nav-home") private WebElement homeNavBtn; // 全局搜索操作方法 public void performGlobalSearch(String keyword) { globalSearchInput.sendKeys(keyword); globalSearchInput.submit(); } }
- 其他页面类直接继承该公共类,即可直接使用这些元素和方法:
public class ProductPage extends CommonElementsPage { // 产品页面独有元素 @FindBy(id = "product-detail-title") private WebElement productTitle; // 产品页面独有操作 public String getProductTitle() { return productTitle.getText(); } }
- 如果遇到不支持继承的场景,也可以用组合方式,在各页面类中实例化公共类对象,调用其元素和方法。
这种方式能让自动化测试代码更易维护,降低后续迭代成本,是页面对象模型中处理全局公共元素的标准做法。
内容的提问来源于stack exchange,提问作者NoNoNo
相关产品推荐
相关产品推荐

