Селен и Ифраме - PullRequest
       7

Селен и Ифраме

20 голосов
/ 28 сентября 2011

У меня есть iframe, который загружается, когда я нажимаю на вкладку на странице.Когда я использую Firebug для просмотра iframe в IE8, все, что я вижу, это:

iframe id=tabContextFrame class=contextFrame contentEditable=inherit src=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 name=tabContextFrame url=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 scrolling=auto

и все. Иерархия под iframe не видна.Я хочу нажать на ссылку в пределах iframe.Чтобы найти элементы внутри iframe, я сделал selenium.click("on the tab that loads the iframe"), а затем selenium.getHtmlSource().Из этого источника я, по крайней мере, могу найти интересующую меня ссылку.Я сделал selenium.click("//span[text()='Link']"), но, похоже, ничего не сделал.Есть идеи, пожалуйста?

Вот код:

selenium.click("//span[text()='tab that loads iframe']");   
Thread.sleep(5000);   
selenium.selectFrame("tabContextFrame");         
selenium.mouseOver("//span[text()='Link']");   
selenium.mouseDown("//span[text()='Link']");  
selenium.mouseUp("//span[text()='Link']");   
Thread.sleep(5000);   
selenium.selectFrame("null");  

Ответы [ 2 ]

40 голосов
/ 22 ноября 2011

Полагаю, вы используете Selenium 1.0.Вы смотрели на Selenium 2.0 и WebDriver.Я нашел следующее, и оно сработало для меня:

В: Как мне ввести в iframe contentEditable?A: Предполагается, что iframe называется "foo":

driver.switchTo().frame("foo");
WebElement editable = driver.switchTo().activeElement(); 
editable.sendKeys("Your text here"); 

Иногда это не работает, и это потому, что в iframe нет содержимого.В Firefox перед «sendKeys» вы можете выполнить следующее:

((JavascriptExecutor) driver).executeScript("document.body.innerHTML = '<br>'"); 

Это необходимо, потому что в iframe по умолчанию нет содержимого: нет ничего, с чего отправлять ввод с клавиатуры.Этот метод вызывает вставку пустого тега, который прекрасно все настраивает.

Не забудьте отключить фрейм, как только вы закончите (поскольку все дальнейшие взаимодействия будут с этим конкретным фреймом):

driver.switchTo().defaultContent();

Я нашел это на http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions

0 голосов
/ 09 января 2015

Использовать driver.switchTo (). DefaultContent (); сначала сделай свою операцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...