2015-07-21 3 views
1

Есть ли способ определить следующее в Selenium?Идентификация числа iframes на странице с использованием Selenium?

Number of iframes in a page 
Attributes/Details of the current iframe 
+0

Спасибо всем! наряду с методом size() используется метод switchTo() для перехода к кадру. Первоначально мне было трудно идентифицировать текущий фрейм с использованием java-кода (интересно, есть ли он!). С помощью элемента Inspect в chrome идентифицируется имя фрейма, и теперь я могу идентифицировать элементы в этом фрейме. – justcurious

ответ

3
driver.findElements(By.xpath("//iframe")).size(); 

Для получения сведений о текущем кадре я предлагаю вам перейти к нему с помощью WebElement объекта и switchTo, а затем получить атрибуты, как вы обычно делаете, с getAttribute

UPD

Фактически, да, сначала укажите количество iframe в текущем контексте. Если вы не хотите, чтобы сделать это рекурсивно, но хотите быстро и работает (грязное) решение - просто получить исходный код страницы и найти все включения "<iframe" строки

2

Вот пример, как вы можете подойти к нему:

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()); 
     } 
1

Как и другие ответы заявили, вы можете определить количество кадров в настоящее время сосредоточены контексте с помощью:

driver.findElements(By.xpath("//iframe")).size(); 

Однако это не будет идентифицировать любые кадры, которые являются потомками ANO это рама. Для этого вам нужно сначала переключиться на этот родительский фрейм.

Чтобы получить атрибуты, такие как имя или идентификатор для сфокусированного в настоящее время кадра вы можете использовать JavascriptExecutor так:

String currentFrameName = (String)((JavascriptExecutor) driver).executeScript("return window.frameElement.name"); 
+0

Это лучший ответ, на который я верю. –

+0

Я получаю следующую ошибку, когда использую приведенный выше код: «Невозможно прочитать свойство« имя »от нуля» Есть ли что-то, что мне здесь не хватает? – justcurious

+0

Вы находитесь в контексте верхнего уровня страницы, когда пытаетесь выполнить «return window.frameElement.name»? «window.frameElement» вернет null, если вы фокусируете содержимое верхнего уровня на странице. –

Смежные вопросы