java - 如何将多个组件 (WebElements) 包装成一个组件?组件对象模型和页面对象模型
问题描述
我正在为基于 Angular.io 的 Web 应用程序开发测试。我正在用 Java 编写,我正在使用 Selenium (WebDriver)。我使用 Selenium 的 PageFactory 类遵循页面对象模型。由于我有一些非常复杂和嵌套的页面,我想从页面中获取某些组件(如嵌套 div)并将其包装在单个 WebElement / 自定义对象中。我认为这被称为组件对象模式。
让我们保持简单和通用。假设我有这个 html 页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
</head>
<body>
<div class="list">
<div class="element">
<div class="country">France</div>
<div class="capital">Paris</div>
</div>
<div class="element">
<div class="country">Norway</div>
<div class="capital">Oslo</div>
</div>
<div class="element">
<div class="country">United Kingdom</div>
<div class="capital">London</div>
</div>
<!-- ... -->
</div>
</body>
</html>
遵循页面对象模式并使用 Selenium 提供的 Pagefactory 类,我有这个代表页面的类:
import thisClass;
import thatClass;
public class ListPage {
ChromeDriver driver;
public ListPage(ChromeDriver) {
PageFactory.initElements(driver, this);
this.driver = driver;
}
@FindAll(@FindBy(how = How.XPATH, using = "//div[@class = 'element']"))
private List<WebElement> elements;
@FindAll(@FindBy(how = How.XPATH, using = "//div[@class = 'country']"))
private List<WebElement> countrys;
@FindAll(@FindBy(how = How.XPATH, using = "//div[@class = 'capital']"))
private List<WebElement> capitals;
}
有没有办法可以定义类“元素”,例如:
class Element {
public WebElement country;
public WebElement capital;
Element(WebElement country, WebElement capital) {
this.country = country;
this.capital = capital;
}
}
并转换private List<WebElement> elements;
成private List<Element> elements;
这样我就可以省略“国家”和“首都”?这种方式我将不得不打电话elements.get(index).country.getText()
或什么的。
如果可能的话,这将对我有很大帮助。
解决方案
推荐阅读
- android - 无法完成“广告”部分
- linux - 配置 Dockerfile 以运行 cronjob
- c# - itext7 pdfstream未压缩
- flutter - 如何根据应用平台在 Flutter 应用中拆分 Cupertino/Material?
- amazon-web-services - AWS Lambda 无权执行权限中列出的操作
- express - 如何部署使用 Express Router 的 Express 应用程序
- python-3.x - “ValueError:'c' 参数有 28 个元素,不能与大小为 33 的 'x'、大小为 33 的 'y' 一起使用”与 Networkx k-partite graph
- python - 函数只返回一次迭代,而不是多次。怎么了?
- c - 我如何判断输出是否是C中的整数
- dataframe - 规范化和非规范化数据框中的行