Есть ли способ определить следующее в Selenium?Идентификация числа iframes на странице с использованием Selenium?
Number of iframes in a page
Attributes/Details of the current iframe
Есть ли способ определить следующее в Selenium?Идентификация числа iframes на странице с использованием Selenium?
Number of iframes in a page
Attributes/Details of the current iframe
driver.findElements(By.xpath("//iframe")).size();
Для получения сведений о текущем кадре я предлагаю вам перейти к нему с помощью WebElement
объекта и switchTo
, а затем получить атрибуты, как вы обычно делаете, с getAttribute
UPD
Фактически, да, сначала укажите количество iframe в текущем контексте. Если вы не хотите, чтобы сделать это рекурсивно, но хотите быстро и работает (грязное) решение - просто получить исходный код страницы и найти все включения "<iframe"
строки
Вот пример, как вы можете подойти к нему:
WebDriver driver = new FirefoxDriver();
driver.get("http://the-internet.herokuapp.com/iframe");
// find all your iframes
List<WebElement> iframes = driver.findElements(By.xpath("//iframe"));
// print your number of frames
System.out.println(iframes.size());
// you can reach each frame on your site
for (WebElement iframe : iframes) {
// switch to every frame
driver.switchTo().frame(iframe);
// now within the frame you can navigate like you are used to
System.out.println(driver.findElement(By.id("tinymce")).getText());
}
Как и другие ответы заявили, вы можете определить количество кадров в настоящее время сосредоточены контексте с помощью:
driver.findElements(By.xpath("//iframe")).size();
Однако это не будет идентифицировать любые кадры, которые являются потомками ANO это рама. Для этого вам нужно сначала переключиться на этот родительский фрейм.
Чтобы получить атрибуты, такие как имя или идентификатор для сфокусированного в настоящее время кадра вы можете использовать JavascriptExecutor так:
String currentFrameName = (String)((JavascriptExecutor) driver).executeScript("return window.frameElement.name");
Это лучший ответ, на который я верю. –
Я получаю следующую ошибку, когда использую приведенный выше код: «Невозможно прочитать свойство« имя »от нуля» Есть ли что-то, что мне здесь не хватает? – justcurious
Вы находитесь в контексте верхнего уровня страницы, когда пытаетесь выполнить «return window.frameElement.name»? «window.frameElement» вернет null, если вы фокусируете содержимое верхнего уровня на странице. –
Спасибо всем! наряду с методом size() используется метод switchTo() для перехода к кадру. Первоначально мне было трудно идентифицировать текущий фрейм с использованием java-кода (интересно, есть ли он!). С помощью элемента Inspect в chrome идентифицируется имя фрейма, и теперь я могу идентифицировать элементы в этом фрейме. – justcurious