4

因此,我正在阅读 selenium 测试设计注意事项文档,并且我对此处的 UI 映射部分有疑问:http: //seleniumhq.org/docs/06_test_design_considerations.html#ui-mapping

他们建议像这样创建一个属性文件:

admin.username = loginForm:tbUsername
admin.loginbutton = loginForm:btnLogin
admin.events.createnewevent = adminHomeForm:_activitynew
admin.events.cancel = addEditEventForm:_IDcancel
admin.events.viewoldevents = adminHomeForm:_activityold

将 html 对象映射到关键字

然后他们会像这样使用它:

selenium.type(admin.username, "xxxxxxxx");

但是,根据我对属性对象的了解,它的工作方式与哈希表非常相似。现在我正在加载我的属性文件,如下所示:http: //docs.oracle.com/javase/tutorial/essential/environment/properties.html 在创建和加载默认属性部分下

所以在我需要做的文档中做同样的声明:

selenium.type(loadedProps.get(admin.username), "xxxxxxx");

这还不错,只是不像他们的例子那样可读,所以我的问题是如何加载属性文件,以便我可以像他们一样使用关键字。另外,我正在考虑使用页面对象设计模式,所以如果我这样做了,我会定义一个 PageObject Base 类,它加载属性文件,然后扩展基础的所有页面对象类都可以访问属性,这是合理的推理吗?

4

2 回答 2

1

java中,因为 '.' 作为运营商具有意义,你不能让它看起来完全像他们的例子(不确定他们在做什么)。您可以执行以下操作:

设置代码:

public class Config {
  public static String admin_username;

  static {
    Properties props = ...;
    admin_username = props.getProperty("admin.username");
  }
}

使用代码:

import static Config.*;

selenium.type(admin_username, "xxxxxxxx");

如果你真的疯了,你可以使用反射加载 Config 类(删除“静态”块中的样板)。

于 2012-07-21T00:23:07.907 回答
0

就个人而言,我不认为这是一个好的做法,但如果你想使用它,嘿,这是你的电话。

public class AdminUiMap {
    public String username;

    public UiMap(String fileName) {
        Properties props = new Properties();
        props.load(new FileInputStream(fileName));

        this.username = props.getProperty("admin.username");
    }
}

然后,在你的测试设置中,你可以做

AdminUiMap admin = new AdminUiMap("adminLocators.properties");

然后你真的会写

selenium.type(admin.username, "xxxxxxxx");

第二个选项:请参阅此文档。这是一本非常简单的手册,我只指出专门针对 Selenium RC 的单个段落:

对于 Selenium RC,您有两种选择。映射文件可能包含在开关user-extensions.js启动时指定的文件中 。或者,您可以在浏览器启动之前使用驱动程序语言-userExtensions中的命令变体动态加载它。setUserExtensionJs

于 2012-07-21T08:13:09.200 回答