如何在selenium webdriver中使定位器通用

时间:2017-08-16 10:06:26

标签: java selenium webdriver

我使用下面的代码和类来使用OOO制作定位器。 首先,我有webelement.properties

LOGIN=id:login_id
PASSWORD=xpath://pwd_xpath

我有ObjectConstant文件

public static final String = LOGIN;

我有一个LocatorsFactory接口

public By getLocator(String locatorelement);

我有一些类,例如IDclass实现LocatorsFactory

@Override
    public By getLocator(String locatorElement) {
        return By.id(locatorElement);
    }

我有另一个加载属性文件

的LocatorManager类
Properties p = new Properties();
    public LocatorsFactoryManager (String PropertiesFilePath){
          try {
            p.load(new FileInputStream(PropertiesFilePath));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getElement(String elementName){
        String element = p.getProperty(elementName);
        return element;
    }
    public LocatorsFactory getLocator(String locatorElement){
        String locator = p.getProperty(locatorElement);
        String locatorType = locator.split(":")[0];
        String locatorValue = locator.split(":")[1];
        LocatorsFactory lf = null;
        switch (locatorType.toLowerCase()){
        case "id" : new IDLocatorFactory();
                    break;
        }

我遇到的问题是如何将locatorValue传递给IDClass并使其工作,我将如何调用ObjectConstant文件,因为我正在为不同的页面创建单独的对象类。

1 个答案:

答案 0 :(得分:2)

你使这种方式比它需要的更复杂。不要将字符串作为定位器传递,并解析它们是ID还是XPath等。只需传递By定位器,就可以避免所有解析和额外的类和方法。例如,

private By loginLocator = By.id("login_id");

通过这个易于阅读的系列,您已经消除了框架中20多行代码的需求。

如果您想遵循OOO原则,请查看page object model。有很多关于它的文档。您将要在表示该页面的类中存储给定页面的定位器以及表示用户操作的方法。