2012-02-03 12 views
9

Ana belgede bir iFrame bulunan eski bir uygulama için testler yazıyorum ve bunun içinde başka bir iFrame var. Yani hiyerarşi geçerli:İçindek iFrame'i Selenium 2'yi kullanarak bulma

Html Div (id = tileSpace) 
    iFrame (id = ContentContainer) 
    iFrame (id = Content) 
     Elements 

Sorun bu

RemoteWebDriver driver = new InternetExplorerDriver(); 
var tileSpace = driver.FindElement(By.Id("tileSpace")); 
var firstIFrame = tileSpace.FindElement(By.Id("ContentContainer")); 
var contentIFrame = firstIFrame.FindElement(By.Id("Content")); 

, ben 2 seviyesini iFrame yani contentIFrame

Herhangi bir fikir ulaşamadığı duyuyorum (C# kullanıyorum) benim kodudur ?

cevap

19

Şu anda benzer bir web sitesinde deneme yapmaktayım. (Ana dokümanın içinde iç içe iframe'ler)

<div> 
    <iframe> 
     <iframe><iframe/> 
    <iframe/> 
</div> 

Size Api sağlanan frame switching method kullanmıyorsanız gibi görünüyor. Bu sorun olabilir.

İşte yaptığım şey, benim için iyi çalışıyor. kodunun altına

//make sure it is in the main document right now 
driver.SwitchTo().DefaultContent(); 

//find the outer frame, and use switch to frame method 
IWebElement containerFrame = driver.FindElement(By.Id("ContentContainer")); 
driver.SwitchTo().Frame(containerFrame); 

//you are now in iframe "ContentContainer", then find the nested iframe inside 
IWebElement contentFrame = driver.FindElement(By.Id("Content")); 
driver.SwitchTo().Frame(contentFrame); 

//you are now in iframe "Content", then find the elements you want in the nested frame now 
IWebElement foo = driver.FindElement(By.Id("foo")); 
+0

teşekkürler! çok iyi çalıştı. – user356247

0

Dene:

//Switch to required frame 
    driver.SwitchTo().Frame("ContentContainer").SwitchTo().Frame("Content"); 

    //find and do the action on required elements 

    //Then come out of the iFrame 
    driver.SwitchTo().DefaultContent();