2017-08-16 20 views
0

以下のコードとクラスを使用して、OOOを使用してロケータを汎用化しています。 まず私はインターフェイスLocatorsFactoryセレンのwebdriverで一般的なロケータを作成する方法

public By getLocator(String locatorelement); 

を有するwebelement.properties

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

IはObjectConstantファイル

public static final String = LOGIN; 

を有するIを有するが、このような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; 
     } 

ファイルロード別LocatorManagerクラスは、私がIDClassにlocatorValueを渡し、それを動作させると私は別のオブジェクトクラスを作成していてどのように私はObjectConstantファイルに呼ぶならない方法です持っています異なるページのために。

+0

「ObjectConstant」の目的は何ですか? –

答えて

1

この方法は、必要以上に複雑にしています。文字列をロケータとして渡したり、IDやXPathなどの文字列を解析したりしないでください。Byロケータを渡すだけで、すべての解析と追加のクラスとメソッドを避けることができます。たとえば、

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

この読みやすい1行で、フレームワークに20行以上のコードが不要になりました。

OOOの原則に従う場合は、page object modelをご覧ください。そこにはたくさんのドキュメントがあります。指定されたページのロケータを、そのページを表すクラスの中に、ユーザーのアクションを表すメソッドとともに格納する必要があります。

関連する問題