Подтвердить что ты не робот

Селен и iframe

У меня есть 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

и что it.На иерархии ниже 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");  
4b9b3361

Ответ 1

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

Q: Как я могу ввести в contentEditable iframe? 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

Ответ 2

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