2014-09-08 4 views
5

Я пытаюсь выбрать Iframe по имени класса, но он не работает, я пытаюсь с tagName, но он работает, но затем, когда я попытался ввести элемент в Iframe, я мог бы «т, не могли бы вы мне помочь вот мой код:Невозможно выбрать Iframe в selenium webdriver

webDriver driver.switchTo().frame(driver.findElement(By.className("cke_wysiwyg_frame cke_reset"))); 
driver.findElement(By.xpath("//body[contains(text(),'type here')]")).sendKeys("Testing"); 

А вот HTML в моей странице:

<div id="cke_534_contents" class="cke_contents cke_reset" role="presentation" style="height: 75px;"> 
    <span id="cke_586" class="cke_voice_label">Press ALT 0 for help</span> 
    <iframe class="cke_wysiwyg_frame cke_reset" frameborder="0" src="" style="width: 100%; height: 100%;" aria-describedby="cke_586" tabindex="0" allowtransparency="true"> 
     <!DOCTYPE html> 
     <html lang="en-gb" dir="ltr"> 
     <head> 
     <body class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" contenteditable="true" spellcheck="true"> 
      type here 
     </body> 
     </html> 
    </iframe> 
</div> 
+0

Я не использую 'className' все, что часто для поиска элементов, но Я уверен, что он не может включать в параметр белый = пробел. Вы пытались использовать 'cssSlector' вместо этого? 'driver.findElement (By.CssSelector (" cke_wysiwyg_frame.cke_reset "));' –

ответ

7

проблема была решена путем нахождения Iframe с помощью XPath

driver.switchTo().defaultContent(); 
driver.switchTo().frame(driver.findElement(By.xpath(iframeXpath))); 

, а затем вернуться в верхнее окно:

driver.switchTo().defaultContent(); 
4

вы не можете выбрать IFrame используя class.Check документацию WebDriver с помощью: -

https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html

  1. Вы можете переключиться на плавающий фрейм на 'Имени'/'ID' атрибут.

    driver.switchTo().frame("frame1"); 
    
  2. Вы можете переключить по кадру.

    driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(0)); 
    

Теперь вы должны проверить на всей странице, сколько плавающие фреймы присутствуют ?? Если его сказать: 3, всегда используйте третий iFrame.

driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(3)); 

Надеюсь, это поможет.

+0

Привет, M, когда я набираю строку выше, я не получаю get(); метод "tagName (" iframe "). get (3));" –

+0

Вам нужна дополнительная отсутствующая скобка: driver.switchTo(). Frame (driver.findElements (By.tagName ("iframe")). Get (0)); – nanospeck

+0

Ссылка мертва – PourMeSomeCode

1

Да, произошла ошибка..Ок вы можете сделать одну вещь. Собственно подсчитайте, сколько iframe есть на странице, если ее третий, который вы хотите переключить.

непосредственно указать значение INT, как говорит доктор,

driver.switchTo().frame(index) 

Так что ваш код может стать чем-то вроде этого: -

driver.switchTo().frame(3); 

И не забудьте вернуться к содержимому по умолчанию.

driver.switchTo().defaultContent(); 

Пожалуйста, дайте мне знать, если это работает или нет.

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