Я автоматизирую https://www.zoho.com/login.html. На этой странице есть раздел входа в рамку. Когда я переключаюсь между разными фреймами и ищу поле «Электронная почта/телефон» (раздел «Войти»), я могу найти его и, следовательно, использовать рабочий блок (ниже), но не могу использовать аналогичный код (также ниже), единственная разница между двумя блоками так я идентифицировал свой элемент userNameInputBox.
// Это работает
List<WebElement> iframeElements = driver.findElements(By.tagName("iframe"));
int nFrames = iframeElements.size();
//Switching frame to go to login frame
for (int i=0; i<=nFrames ; i++) {
System.out.println("nFrames: " +nFrames);
driver.switchTo().frame(i);
if (driver.findElement(By.name("lid")).isDisplayed()){
driver.findElement(By.name("lid")).sendKeys("myuserName1");
}}
Однако, если я использую это (код ниже), он не работает и вместо этого дает мне исключение NullPointerException в строке, где я щелкаю свой userNameInput в поле имени пользователя.
///Это не работает
//Elements
@FindBy(name="lid")
WebElement userNameInput;
//Switching frame to go to login frame
for (int i=0; i<=nFrames ; i++) {
System.out.println("nFrames: " +nFrames);
driver.switchTo().frame(i);
if (driver.findElement(By.name("lid")).isDisplayed()){
userNameInput.click(); //clicking the inputBox
userNameInput.sendKeys("myuserName"); //Sendingkeys into
}}
Может кто-нибудь объяснить, что может быть причиной такой аномалии? Или указать, что я пропустил? Я хочу использовать @FindBy для WebElement.