代码之家  ›  专栏  ›  技术社区  ›  Ashu123

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

  •  1
  • Ashu123  · 技术社区  · 7 年前

    我使用下面的代码和类使用OOO使定位器通用。

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

    public static final String = LOGIN;
    

    我有一个接口定位器工厂

    public By getLocator(String locatorelement);
    

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

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

    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 回复  |  直到 7 年前
        1
  •  2
  •   JeffC    7 年前

    你让这条路变得比需要的更复杂。不要将字符串作为定位器传递,并解析出它们是ID还是XPath等。只需传递 By

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

    如果您想遵循OOO原则,请查看 page object model