首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在selenium中按类进行抽象。

我想在selenium中按类进行抽象。
EN

Stack Overflow用户
提问于 2019-11-30 18:47:48
回答 1查看 201关注 0票数 0

我想在Selenium中按类进行抽象,这样我就可以在独立于selenium的页面类中编写代码。我试过以下几种方法:

代码语言:javascript
复制
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类对象。我希望这些方法是静态的,这样我就可以使用类名来调用这些方法。但是我们不能有静态方法,因为它们必须在接口本身中定义。

如何通过类进行抽象,以便可以将其作为页面类来实现,使得每个元素都将成为变量。

EN

回答 1

Stack Overflow用户

发布于 2019-12-02 18:34:02

尝试创建一个接受定位器类型和定位器值作为构造函数参数的类。现在将值传递给标识符类以形成定位器。并使用所有定位器类型创建一个类,作为接受字符串值的方法。为了提高可读性,您可以将所有定位器类型都设置为Enum。

伪代码示例:-

代码语言:javascript
复制
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等)。

希望这能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59115398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档