これは私がこれを克服する方法です。
環境ごとに異なる要素プロパティファイルを用意しました。
環境A、B 私のプロジェクトでは、Elements_A.propertiesとElements_B.propertiesの2つのプロパティファイルを保持します。 これらのプロパティファイルには、すべてのページ要素があります。 環境に基づいてスクリプトを実行しているときに、スクリプト内の関連するプロパティファイルを参照できるため、1つの要素が他の要素と異なる場合は問題ありません。
は異なるロケータと、テキストボックスがあるホームページにAとBで を言うことができます。
だから、プロパティファイルAに我々は HomePage_Name_TextBox = id_NameInA 「id_NameInA」としての要素を挙げることができるロケータ値と「HomePage_Name_TextBoxは」あなたがその特定の要素を参照するために使用するつもりの文字列です。
プロパティファイルAで賢明のように、我々は同じ要素を挙げることができる HomePage_Name_TextBox = id_NameInB 「id_NameInBは」ロケータ値と「HomePage_Name_TextBox」であるあなたは、その特定の要素を参照するために使用するつもりの文字列です。
両方の要素に同じ名前(HomePage_Name_TextBox)が割り当てられ、ロケータの値が異なることがわかります。すべてのページクラスで
私は、地図を宣言し、今あなたがあなたのページの要素を初期化しようとして方法を決定するには、いくつかのオプションがあります。
public class HomePage {
Map<String, String> elementsMap = new HashMap<String, String>();
//Option 1
public HomePage(Map<String, String> elementMapObj) {
elementsMap = elementMapObj;
}
//Option 2
public HomePage() {
Properties prop = new Properties();
FileReader reader;
HashMap<String, String> propertyMap = new HashMap<String, String>();
try {
reader = new FileReader(new File("CommonConfig.properties"));
prop.load(reader);
for (String key : prop.stringPropertyNames())
{
String value = prop.getProperty(key);
propertyMap.put(key, value);
}
} catch (Exception e) {
//System.out.println(e.toString());
}
try {
reader = new FileReader(new File(propertyMap.get("ElementPropFilePath")));
prop.load(reader);
for (String key : prop.stringPropertyNames())
{
String value = prop.getProperty(key);
elementsMap.put(key, value);
}
} catch (Exception e) {
//System.out.println(e.toString());
}
}
}
- あなたのメインクラスで使用すると、一致する要素のプロパティファイルを読み込み、マップを渡すことができます(パラメータ化コンストラクタを宣言し、ホームページのオブジェクトを初期化する前に、あなたはすべての要素が読んだことがあるマップオブジェクトを渡すことができますホームページのコンストラクタにすべての要素を含む)
- または、HomePageコンストラクタ自体の共通プロパティファイルを読み込むことができます。ここで、Elementsプロパティファイルのパスを参照できます。 例:CommonConfig.properties ができるが、そのようなすべてのどの環境でスクリプトを実行しているとして、構成の詳細、および一般的なファイルパス読むこと(そのような要素のファイルパスなど)と、このファイルが含まれているこのファイルは、コンストラクタ内で読み込まれます 設定ファイルを使用すると、Aでスクリプトを実行したいときは、「リソース/ Elements_A.propertiesに共通するプロパティファイルに「ElementPropFilePath」を変更することができ、この
ElementPropFilePath =リソース/ Elements_A.properties
のようになります。 "実行する前に。 Bでスクリプトを実行する場合は、実行前に共通プロパティファイルの "ElementPropFilePath"を "Resources/Elements_B.properties"に変更できます(これはマシン内のファイルの場所です)。
各環境のすべての要素を含むプロパティファイルを維持し、そのプロパティの詳細を提供し、各ページクラス内にあるelementMapを入力すれば、その要素を共通で参照することができますあなたは(この例ではHomePage_Name_TextBoxある)環境
の両方のために使用される文字列あなたのPageObjectクラスの「FindBy」注釈を使用していますか?または、コードからfindElementを使用していますか? – Grasshopper
Imは@FindByアノテーションを使用しています – Cathal