Вот как мне удалось преодолеть это.
Я сохранил разные файлы свойств элементов для разных сред.
Допустит, среда A, B В моем проекте я держу два собственности файлов с именем Elements_A.properties и Elements_B.properties Этих файлов свойства имеют все элементы страницы. Если один элемент отличается от другого, это не будет проблемой, поскольку при запуске скрипта на основе среды вы можете ссылаться на соответствующий файл свойств в скрипте.
Скажем, в A и B в HomePage есть текстовое поле с различными локаторами.
Таким образом, в файле свойств А мы можем отметить элемент как HomePage_Name_TextBox = id_NameInA «id_NameInA» это значение локатор и «HomePage_Name_TextBox» является строка, которую вы собираетесь использовать для обозначения этого конкретного элемента.
Как мудрый в файл свойство А можно упомянуть тот же элемент, 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 (в главном классе вы можете прочитать файл свойств соответствующего элемента и передать карту содержащий все элементы в конструкторе домашней страницы)
- ИЛИ вы можете прочитать общий файл свойств в самом конструкторе HomePage, где вы можете указать путь файла свойств Elements. ex: CommonConfig.properties Этот файл может содержать все детали конфигурации, такие как в среде, в которой запущены скрипты, и общие пути к файлам для чтения (например, где путь к файлу элемента) и этот файл будут прочитаны внутри конструктора конфигурационный файл будет выглядеть следующим образом
ElementPropFilePath = Ресурсы/Elements_A.properties
Если вы хотите запускать скрипты в A, вы можете изменить «ElementPropFilePath» в общем файле свойств в «Ресурсы/Elements_A.properties "перед запуском. Если вы хотите запускать скрипты в B, вы можете изменить «ElementPropFilePath» в общем файле свойств на «Resources/Elements_B.properties» перед запуском (это местоположение файла на машине).
Просто скажите, если вы сохраняете файлы свойств, содержащие все элементы для каждой среды, и предоставляете эти данные о свойствах и заполняете элементMap, который у вас есть внутри каждого класса страниц, тогда вы сможете ссылаться на этот элемент с общим строка, которую вы использовали для обеих окружений (в данном примере это HomePage_Name_TextBox)
Вы используете аннотацию «FindBy» в классах PageObject? Или вы используете findElement из кода? – Grasshopper
Im используя @FindBy аннотации – Cathal