Selenium和iframe

时间:2011-09-27 21:22:08

标签: iframe selenium

当我点击页面上的标签时,我有一个加载的iframe。当我使用Firebug查看IE8上的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");  

2 个答案:

答案 0 :(得分:40)

我猜你正在使用Selenium 1.0。你看过Selenium 2.0和WebDriver吗?我找到了以下内容,它对我有用:

  

问:如何输入contentEditable iframe?答:假设是   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

上找到了这个

答案 1 :(得分:0)

使用driver.switchTo()。defaultContent();首先进行操作