2016-04-21 5 views
0

Я хочу, чтобы выбрать Iframe с идентификатором = "iframe00237" и данных внутри него:Как выбрать iframe в Selenium?

Это HTML:

<iframe src="http://example/iframe/v2.html?id=5225dddd-588a-49c2-961e-e3417cf5a728 scrolling="no" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100%" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true" id="iframe09328" class="sm_iframe"></iframe> 
    <body> 
     <div> 
      <iframe src="http://example.com/main?id=aab0619b-a938-4f00-b545-742fff5e1118&amp;crtdt=1461214262&amp; scrolling="no" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen="allowfullscreen" id="iframe05443" class="sm_iframe" style="left: 0px; top: 0px; width: 730px; height: 411px;"></iframe> 
     </div> 
     <div> 
      <iframe src="http://example.com/main?id=5225dddd-588a-49c2-961e-e3417cf5a728&amp scrolling="no" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen="allowfullscreen" id="iframe00237" class="sm_iframe" style="left: 0px; top: 0px; width: 811px; height: 456px;"></iframe> 
     </div> 
    </body> 

Iframe src="url" URL является случайным ..

Я нахожу в Stackoverflow и попробовать с кодом:

//Select parent frame 
IWebElement parentFrame = driver.FindElement(By.XPath("//iframe[@id='iframe09328']")); 
driver.SwitchTo().Frame(detailFrame); 

//Current we on detailFrame continues to go to childFrame. 
IWebElement childFrame = driver.FindElement(By.XPath("//iframe[@id='iframe00237']")); 
driver.SwitchTo().Frame(childFrame); 

В режиме отладки, parentFrame и childFrame всегда null.

Как решить мою проблему? Я также попробую FindElement by ID.

+0

является кадр Идентификаторы динамическим? – Paras

+0

@pArAs Идентификатор кадра - это константы. – vanloc

+0

Вы сталкиваетесь с этой проблемой только в режиме 'debug'? – Paras

ответ

1

В случае, если идентификатор является статическим, вы можете использовать By.Id(). Смотрите ниже код:

IWait<IWebDriver> wait = new DefaultWait<IWebDriver>(driver); 
wait.Timeout = TimeSpan.FromSeconds(10); 
wait.PollingInterval = TimeSpan.FromMilliseconds(300); 
By by = By.Id("iframe09328"); 
try 
{ 
    // Switch to the parent iframe 
    wait.Until(d => d.FindElements(by).Count > 0);   
    IWebElement parentFrame = driver.FindElements(by).First(); 
    driver.SwitchTo().Frame(parentFrame); 

    // Switch to the inner iframe 
    by = By.Id("iframe00237"); 
    wait.Until(d => d.FindElements(by).Count > 0); 
    IWebElement childFrame = driver.FindElements(by).First(); 
    driver.SwitchTo().Frame(childFrame); 
} 
catch (Exception) 
{ 
    throw new NoSuchElementException("Unable to find element, locator: \"" + by.ToString() + "\"."); 
} 

Если это не работает, пожалуйста, дайте нам исключение «Не удается найти элемент, локатор: ......»

Смежные вопросы