2

我有一个小问题,在 Selenium 和 Page Factory 中的以下行之间有什么区别?

@FindBy(id = "foobar") WebElement foobar;

@FindBy(how = How.ID, using = "foobar") WebElement foobar;
4

1 回答 1

1

根据注释类型 FindByJavaDocs两个表达式:

@FindBy(id = "foobar") WebElement foobar;

@FindBy(how = How.ID, using = "foobar") WebElement foobar;

两个表达式都指向同一个元素。

修饰符如何

如何org.openqa.selenium.support.How、扩展java.lang.Enum<How>和实现中定义java.lang.Comparable<How>How枚举常量如下:


更新

根据计数器问题,如果您查看枚举的源代码,它是如何定义的:

public enum How {
  CLASS_NAME {
    @Override
    public By buildBy(String value) {
      return By.className(value);
    }
  },
  CSS {
    @Override
    public By buildBy(String value) {
      return By.cssSelector(value);
    }
  },
  ID {
    @Override
    public By buildBy(String value) {
      return By.id(value);
    }
  },
  ID_OR_NAME {
    @Override
    public By buildBy(String value) {
      return new ByIdOrName(value);
    }
  },
  LINK_TEXT {
    @Override
    public By buildBy(String value) {
      return By.linkText(value);
    }
  },
  NAME {
    @Override
    public By buildBy(String value) {
      return By.name(value);
    }
  },
  PARTIAL_LINK_TEXT {
    @Override
    public By buildBy(String value) {
      return By.partialLinkText(value);
    }
  },
  TAG_NAME {
    @Override
    public By buildBy(String value) {
      return By.tagName(value);
    }
  },
  XPATH {
    @Override
    public By buildBy(String value) {
      return By.xpath(value);
    }
  },
  UNSET {
    @Override
    public By buildBy(String value) {
      return ID.buildBy(value);
    }
  };

  public abstract By buildBy(String value);
}

因此,例如,当您按照以下行结合ID实现How时:

@FindBy(how = How.ID, using = "foobar") WebElement foobar;

how = How.ID 在功能上返回By.id(value)并且等同于以下行返回的内容:

@FindBy(id = "foobar") WebElement foobar;

因此,我们可以得出结论,@FindBy(id = "foobar")@FindBy(how = How.ID, using = "foobar")只是实现相同结果的两种不同方式,并且可以根据用户的选择使用。

于 2018-03-08T10:57:06.840 回答