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 を使用せずに他のメソッドで変数を使用する方法が必要です。@CacheLookup アノテーションで @FindBy(how = How.NAME, using = "locatorstring") を使用できる PageFactory について読みました。それは私が必要とするものですか?CacheLookup は driver.findElement を 1 回だけ使用し、参照を再利用しますか?
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;
}
これは正しい方法ですか?