Java 确定创建新对象后不重新创建类级别字段的原因
我有一个使用Java和Selenium处理的网页(称为InfoPage)。该页面由节(带名称)和下面带值的字段组成。参见示例Java 确定创建新对象后不重新创建类级别字段的原因,java,selenium,constructor,Java,Selenium,Constructor,我有一个使用Java和Selenium处理的网页(称为InfoPage)。该页面由节(带名称)和下面带值的字段组成。参见示例 **Addresses** Service Address 616 Anywhere Street Notice Account 867-5309 Service City Springfield “地址”是部门名称,“服务地址”、“通知账户”、“服务城市”是字段名称。像“616 Anywhere Street”之类的东西就是价值观
**Addresses**
Service Address 616 Anywhere Street
Notice Account 867-5309
Service City Springfield
“地址”是部门名称,“服务地址”、“通知账户”、“服务城市”是字段名称。像“616 Anywhere Street”之类的东西就是价值观
该部分下的字段如下所示:
<tr>
<td>Service Address</td>
<td>
<div> 616 Anywhere Street
...
服务地址
Anywhere街616号
...
我编写了一个方法来获取节名和字段名,并在其中获取值。这个很好用。有数百个(上面只是一个小的横截面)。我浏览各个部分,找到名称,然后在下面查找字段名称
为了避免每次都这样做,我制作了一张地图(类级别)
static void Map fieldmap=new HashMap();
键是节和字段名的串联。当我想要得到一个字段的值时,我首先检查映射。如果它是空的,那么我先把它填满
有一个编辑按钮来编辑字段。编辑字段时,可以更改值并单击“保存”。我注意到,当我尝试获取字符串值时,它是旧值,而不是更新值。我想“哦,地图不应该是静态的。所以我删除了静态的。但是,这并不能解决问题。”
我相信,每次创建新的InfoPage时,地图都应该重新创建为空,但这似乎不起作用
执行编辑和保存时会发生什么情况,它会执行以下操作(返回InfoPage):
受保护的静态T getPage(WebDriver驱动程序,类代理){
T=零;
试一试{
t=PageFactory.initElements(驱动程序、代理);
...
返回t;
所以我猜initElements不会在页面上做新的操作?它被定义为
public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
T page = instantiatePage(driver, pageClassToProxy);
initElements(driver, page);
return page;
}
publicstaticinitelements(WebDriver驱动程序,类pageClassToProxy){
T页面=实例化页面(驱动程序,页面类toproxy);
初始化元素(驱动程序,页面);
返回页面;
}
最终会生成pageClassToProxy.newInstance(),我猜它会生成一个新的,它应该调用构造函数并重新初始化所有内容。所以我不明白为什么在所有这些发生之后,我的fieldMap中仍然有条目。我删除了静态部分
所以我猜有两个问题。第一,为什么没有制作新的fieldMap?第二,有没有办法判断页面何时“脏”了?也就是说,自从上次创建地图以来,页面已经更改了,所以我可以清除它并再次填充它?您确定使用从getPage()创建的新实例吗方法?你可以添加调用代码吗?我应该可以添加它。不确定什么是公司专有的yah。(注意对象的实际名称是diff):detailPage=editPage.save();使用一些代码进行了尝试,效果如预期。字段已重新初始化。我这边有点奇怪。现在在原始编辑方法中,我清除了映射
protected static <T> T getPage(WebDriver driver, Class<T> proxy) {
T t = null;
try {
t = PageFactory.initElements(driver, proxy);
...
return t;
public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
T page = instantiatePage(driver, pageClassToProxy);
initElements(driver, page);
return page;
}