Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定创建新对象后不重新创建类级别字段的原因_Java_Selenium_Constructor - Fatal编程技术网

Java 确定创建新对象后不重新创建类级别字段的原因

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”之类的东西就是价值观

我有一个使用Java和Selenium处理的网页(称为InfoPage)。该页面由节(带名称)和下面带值的字段组成。参见示例

**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;
 }