Можно ли переключиться на элемент во фрейме без использования driver.switchTo(). Frame("frameName") в Selenium Webdriver Java?
У меня есть несколько вложенных фреймов, и мне нужно получить доступ к элементам под ними. Поскольку эти кадры являются динамическими, я не могу получить доступ к этим элементам. Могу ли я получить доступ к элементам без использования driver.switchTo(). Frame()
Как использовать xpath напрямую или jquery, javascript или что-то еще? Любые предложения приветствуются
2 ответа
Проще говоря,
Нет, было бы невозможно получить доступ к элементам, не переключившись на намеченный <iframe>
т.е. без использования driver.switchTo().frame()
Чтобы переключиться на нужный кадр, вы должны использовать одно из следующих:
Переключиться через имя кадра:
driver.switchTo().frame("frame_name");
Переключить через Frame ID:
driver.switchTo().frame("frame_id");
Переключить через индекс кадра:
driver.switchTo().frame(1);
Переключиться через WebElement:
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
Переключиться на родительский кадр:
driver.switchTo().parentFrame();
Переключиться на содержимое по умолчанию:
driver.switchTo().defaultContent();
Но в соответствии с передовой практикой вы всегда должны вызывать WebDriverWait для желаемого доступного фрейма и переключаться на него следующим образом:
Переключиться через имя кадра:
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
Переключить через Frame ID:
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
Переключение через Frame cssSelector:
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
Переключить через Frame xpath:
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
Я не думаю, что вы можете переключиться на фрейм, не используя driver.switchTo.frame(), когда у вас есть несколько фреймов.
Но вы можете использовать xpath, как показано ниже, с идентификатором содержит для динамических фреймов:
"//iframe[contains(@id,'frame')]"
(или же)
Вы можете попробовать использовать атрибут src фрейма в вашем xpath.
(или же)
Вы можете найти количество фреймов или фреймов, используя ниже xpath, если ваша позиция фрейма такая же:
int noofframes=driver.findelements(By.tagName(“iframe”)).size();
И с помощью индекса вы можете переключиться на определенный кадр, а затем вы можете попытаться найти элементы в кадре.
driver.switchTo.frame(i);
Надеюсь это поможет.