selenium - 使用页面对象模型在 Cucumber 中制作动态代码
问题描述
有没有办法使用 Cucumber 动态执行操作?
例子:
功能文件:
Scenario: Click all the boxes
Given On the checkbox page
When Click checkboxA
And Click checkboxB
步骤定义:
@When("Click checkboxA")
public void clickCheckBoxA()
{
pageObject.checkBoxA.click();
}
@And("Click checkboxB")
public void clickCheckBoxB()
{
pageObject.checkBoxB.click();
}
在这种情况下,有两个非常相似的步骤定义。之所以有两种不同的定义,是因为每个 WebElement 都是在 pageObject 类中定义的。有没有办法动态传递我们想要单击的复选框,而不是让两个单独的方法执行相同的操作?
我能想到的唯一方法是在功能步骤中将选择器作为参数传递,并在步骤定义方法中实例化 webElement。但这对我来说似乎是不好的做法。
解决方案
Click
是你的一步。对于您可能要单击的每个项目,它不应该是唯一的。您应该使用正则表达式匹配您想要单击的内容。以下将您的两个步骤合二为一。
@When("^Click (.*)$")
public void clickElement(String elementToClick) {
switch (elementToClick) {
case "checkBoxA":
pageObject.checkBoxA.click();
case "checkBoxB":
pageObject.checkBoxB.click();
}
}
我建议使用更智能的正则表达式匹配(这个是懒惰和草率的),您还可以为要单击的元素创建一个新变量,将其值分配给每个元素中的现有元素,并在语句之后case
进行一次调用.click()
switch
关于您“动态地”执行此操作的问题,您不能在 Java 中这样做(我认为您正在考虑在我上面给出的示例中使用一行pageObject.elementToClick.click();
?),因为它是一种编译的编程语言;您的代码不能在运行时更改。
推荐阅读
- javascript - 在循环 ForEach 之前等待确认
- html - 导航项下方带有子菜单的全宽下拉菜单
- selenium - 范围报告仅保存 Jenkins 中最后一项作业的最后一项结果
- c# - 如何计算 3d 扫描的腹部周长?
- java - 当二维数组 [][] 和数组 [] 之间的赋值是合法的?
- powershell - 删除一个txt文件除第一行以外的内容
- javascript - 如何修复一个简单的 js 计算器(返回未定义)
- elasticsearch - 如何在弹性搜索中加载数据?
- python - 如何暂停 Python 脚本并让用户在 Linux 终端中输入
- azure - ADFv2中如何根据文件名将文件复制到不同目录