Вот как мне удалось это преодолеть.
Я хранил разные файлы свойств элементов для разных сред.
Допустим, среда A, B. В моем проекте я храню два файла свойств с именами Elements_A.properties и Elements_B.properties. Эти файлы свойств содержат все элементы страницы. Если один элемент отличается от другого, это не будет проблемой, поскольку при запуске сценария на основе среды вы можете сослаться на соответствующий файл свойств в сценарии.
Допустим, в 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 (в вашем основном классе вы можете прочитать файл свойств соответствующего элемента и передать карту, содержащую все элементы, конструктору Home Страница)
- ИЛИ вы можете прочитать общий файл свойств в самом конструкторе HomePage, где вы можете указать путь к файлу свойств Elements. пример: CommonConfig.properties этот файл может содержать все детали конфигурации, такие как среда, в которой вы запускаете сценарии, и общие пути к файлам для чтения (например, путь к файлу элемента), и этот файл будет считан внутри файла конфигурации конструктора. будет выглядеть так
ElementPropFilePath = Resources/Elements_A.properties
Если вы хотите запускать сценарии в A, вы можете изменить «ElementPropFilePath» в общем файле свойств на «Resources/Elements_A.properties» перед запуском. Если вы хотите запускать сценарии в B, вы можете перед запуском изменить «ElementPropFilePath» в общем файле свойств на «Resources/Elements_B.properties» (это расположение файла на машине).
Проще говоря, если вы поддерживаете файлы свойств, содержащие все элементы для каждой среды, и предоставляете сведения об этом свойстве и заполняете elementMap, который у вас есть внутри каждого класса страницы, тогда вы сможете ссылаться на этот элемент с помощью общей строки, которую вы использовали для обе среды (в данном примере это HomePage_Name_TextBox)
person
Sanoj Indrasinghe
schedule
19.12.2016