2011-09-27 53 views
20

我有一個iframe,當我點擊一個頁面上的標籤時被加載。當我使用Firebug來看看IE8上的iframe,我看到的是:硒和iframe

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"); 
+1

你試過selenium 2.0與網絡驅動程序? U可以使用driver.SwitchTo()。Frame() – Sudara

+0

[處理webdriver中的iframe]的可能重複(http://stackoverflow.com/questions/9942928/handling-iframe-in-webdriver) – Innovation

回答

38

我猜你正在使用Selenium 1.0。你看過Selenium 2.0和WebDriver嗎?我發現以下內容,它對我很有用:

問:如何鍵入contentEditable iframe?答:假設 IFRAME被命名爲「富」:

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

使用驅動程序。.switchTo()defaultContent();首先,然後做你的操作