首页 > 解决方案 > Seleniun Hashmap(String,WebElement)在传递String时不返回WebElement

问题描述

我编写了一个 java 类 (CustomerHistoryMapping),它包含一个 HashMap(String, WebElement),如下面的代码(代码的第一部分)我的总体目标是能够使用给定的 WebElement,具体取决于我的字符串传递给 HashMap 类。

package com.xxxxx.data;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.HashMap;
import java.util.Map;

public class CustomerHistoryMapping {

  @FindBy(xpath = "(//td/span[text()='Preferred Name']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewPreferredNameValue;

  @FindBy(xpath = "(//td/span[text()='Mobile']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewMobileValue;

  @FindBy(xpath = "(//td/span[text()='Email']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewEmailValue;

  @FindBy(xpath = "(//td/span[text()='Mailing Street']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewMailingStreetValue;

  @FindBy(xpath = "(//td/span[text()='Mailing City']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewMailingCityValue;

  @FindBy(xpath = "(//td/span[text()='Mailing Zip/Postal Code']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewMailingPostCodeValue;

  @FindBy(xpath = "(//td/span[text()='Mailing State/Province']/../following-sibling::td[3]/span/span)[1]")
  public WebElement txaNewMailingStateValue;

   Map<String, WebElement> mapping = new HashMap<String, WebElement>();

  public CustomerHistoryMapping() {
    mapping.put("preferredName", txaNewPreferredNameValue);
    mapping.put("mobile", txaNewMobileValue);
    mapping.put("email", txaNewEmailValue);
    mapping.put("address", txaNewMailingStreetValue);
    mapping.put("city", txaNewMailingCityValue);
    mapping.put("postcode", txaNewMailingPostCodeValue);
    mapping.put("state",txaNewMailingStateValue);
  }

  public WebElement getValue(String mapKey) {
    return mapping.get(mapKey);
  }

}

但是,当我调用 getValue("preferredName") - (参见第二段代码)并检查日志时,打印出来的是:

Str 是:preferredName,而 ele 是:null

      objCustomerHistoryMapping = new CustomerHistoryMapping();
      WebElement ele = objCustomerHistoryMapping.getValue("preferredName");
      logger.info("Str is: preferredName, And ele is: " + ele);

所以 HashMap 中的 WebElement 没有被拉回 - 有什么想法吗?

标签: javaseleniumhashmap

解决方案


您应该添加PageFactory.initElements(...)以使用页面上的元素初始化您的字段。您可以将其添加为构造函数的最后一行。

除非您已使用initelements所有字段,否则将引用null.


推荐阅读