我正在为我的 selenium webdriver+TestNG 框架使用 PageObject 模式。
在我的 pageObject 类中,我有多种方法,我使用 driver.findElement 来查找同一页面上存在的相同 web 元素。
例如:
public class HomePage extends BasePage {
private WebElement searchField;
private String searchFieldLocator;
HomePage(WebDriver driverFromTest, CustomLogger loggerFromTest,
HashMap<String, String> testDataMapFromTest)
{
super(driverFromTest, loggerFromTest, testDataMapFromTest);
searchFieldLocator = testDataMap.get("searchFieldLocator");
}
public void method1()
{
searchField = driver.findElement(By.cssSelector(searchFieldLocator));
searchField.sendKeys("foo");
}
public void method2()
{
searchField = driver.findElement(By.cssSelector(searchFieldLocator));
searchField.sendKeys("bar");
}
我的问题是:
1. 如何避免在同一个 WebElement 变量上多次使用 driver.findElement。我想要一种方法,一旦我找到 webelement,我将在任何其他方法中使用该变量,而不使用 driver.findElement。我已阅读有关 PageFactory 的信息,您可以在其中使用 @FindBy(how = How.NAME, using = "locatorstring") 和 @CacheLookup 注释。这是我需要的吗?CacheLookup 是否只使用一次 driver.findElement 并重新使用引用?
2. 其次,当你对同一个 web 元素执行太多 driver.findElements 时,它是否会占用大量内存?这是我不需要担心的微优化吗?
我想了一种方法来避免在同一个 web 元素上执行 driver.findElement ,方法是编写如下方法:
protected WebElement getWebElement(By by, String elementName) {
WebElement element;
if(webElementMap.get(elementName)==null)
{
element = driver.findElement(by);
webElementMap.put(elementName, element);
}
else
element = webElementMap.get(elementName);
return element;
}
这是正确的方法吗?