目前,我所有的步骤定义都只接受元素ID,以便在网页上执行操作。
driver.findElement(By.id("id"));
但是,如果我想传递一个CSS选择器,标签,链接或xpath,该怎么办?
我不想为所有这些场景重新编写所有步骤定义(或创建多个相同的步骤def),而又不知道将传递哪一个。
driver.findElement(By.cssSelector("css"));
driver.findElement(By.link("link"));
driver.findElement(By.tagName("tag"));
driver.findElement(By.xpath("xpath"));
我是否可以使用switch语句来确定要传递的定位符,然后继续执行相应的操作?
最佳答案
您可以创建一个帮助程序类,以根据不同的定位符字符串返回By
。
// feature file
Secnario Outline: Test user login
Given ...
And user input username: <value> into <element>
And user input password: <value> into <element>
Examples:
| value | element |
| user1 | id:username |
| pwd1 | css:input.pwd |
// helper class to build Locator
public class Locator {
public static By build(locator) {
String[] parts = locator.split(":");
String use = parts[0].trim().lowerCase();
String value = parts[1].trim();
if(use.equals("id")) {
return By.id(value);
}
else if(use.equals("css")){
return By.css(value);
}
.....
}
}
// step definition
Then("^user input username: (.+) into (.+)$",
(String inputValue, String locatoExp) -> {
driver.findElement(Locator.build(locatoExp)).sendKeys(inputValue);
});
关于java - 如何让WebDriver在使用CSS,XPath,标签,链接或元素ID之间进行切换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50067511/