这就是我设法克服这个问题的方法。
我为不同的环境保留了不同的元素属性文件。
可以说环境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),并且定位器的值不同。
在每个页面类中,我声明了一个Map,现在您有几个选项来决定如何为您的页面初始化元素。
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构造函数中读取一个公共属性文件,你可以在其中提到元素属性文件路径。 例如:CommonConfig.properties 此文件可以包含所有配置详细信息,例如在哪个环境中运行脚本,以及要读取的常用文件路径(例如元素文件路径的位置)以及此文件将在构造函数中读取 配置文件看起来像这样
ElementPropFilePath =资源/ Elements_A.properties
当你想运行在一个脚本,可以在共同财产文件更改“ElementPropFilePath”到“资源/ Elements_A.properties “在跑步之前。 当您想在B中运行脚本时,可以在运行之前(这是机器中文件的位置),将公共属性文件中的“ElementPropFilePath”更改为“Resources/Elements_B.properties”。
简而言之,如果您维护包含每个环境的所有元素的属性文件,并提供该属性的详细信息并填充每个和每个页面类中的elementMap,那么您将能够将该元素与公共您在这两个环境中使用的字符串(在本例中为HomePage_Name_TextBox)
您在PageObject类中使用了“FindBy”注释吗?或者你使用代码中的findElement? – Grasshopper
我使用@FindBy注释 – Cathal