目前,我所有的步骤定义都只接受元素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/

10-11 22:39