我想在Selenium中按类进行抽象,这样我就可以在独立于selenium的页面类中编写代码。我试过以下几种方法:
interface Element{
By id(String id);
By name(String name);
By className(String className);
By tagName(String tagName);
By xpath(String xpath);
By cssSelector(String cssSelector);
By linkText(String linkText);
By partialLinkText(String partialLinkText);
}
class Locator {
public static By id(String id) {
return By.id(id);
}
public static By name(String name) {
return By.name(name);
}
public By className(String className) {
return By.className(className);
}
public By tagName(String tagName) {
return By.tagName(tagName);
}
public By xpath(String xpathExpression) {
return By.xpath(xpathExpression);
}
public By cssSelector(String cssSelector) {
return By.cssSelector(cssSelector);
}
public By linkText(String linkText) {
return By.linkText(linkText);
}
public By partialLinkText(String partialLinkText) {
return By.partialLinkText(partialLinkText);
}
}通过这种方式,我必须创建Locator类对象。我不想创建Locator类对象。我希望这些方法是静态的,这样我就可以使用类名来调用这些方法。但是我们不能有静态方法,因为它们必须在接口本身中定义。
如何通过类进行抽象,以便可以将其作为页面类来实现,使得每个元素都将成为变量。
发布于 2019-12-02 18:34:02
尝试创建一个接受定位器类型和定位器值作为构造函数参数的类。现在将值传递给标识符类以形成定位器。并使用所有定位器类型创建一个类,作为接受字符串值的方法。为了提高可读性,您可以将所有定位器类型都设置为Enum。
伪代码示例:-
Enum locatorType{
id,
class,
...
}
class identifier{
identifier(locatorType lt,String value){
switch(lt.name()){
//call the By.ltname(value) passing the value;
...
}
class BY extends By{
public By id(value){
//form the findElement;
}
...//similarly for all the locators
}一旦创建了标识符。我们可以使用要传递给方法包装器的对象,通过创建的对象实现所有的webDriver方法(click、sendKeys等)。
希望这能解决你的问题。
https://stackoverflow.com/questions/59115398
复制相似问题