使用c#在Selenium中使用SwitchTo()框架

时间:2014-12-12 15:27:03

标签: c# html selenium frame frameset

我在这个网站上使用了selenium,但我不能使用它的任何元素。因为它们来自'frame'而且来自'frameset',这里是html部分;

 <frameset rows="0%, 95%" frameborder="0" frameSpacing="0" marginHeight="0" marginWidth="0">
                <frame id='unloadFrame' src="/somesrc" noresize>
                <frame src="/somesrc" noresize>
 </frameset>
            <noframes>
              Your browser doesn't support frames, This web site requires a frames capable browser.
            </noframes>

我需要访问以src开头的第二帧,我使用了这个方法,但仍然无法使用任何元素;

driver.SwitchTo().Frame(1);
Boolean sa = driver.FindElements(By.Id("ctl00_MainContent_txtCustomerId")).Count > 0;
if (sa == true)
{
    driver.FindElement(By.Id("ctl00_MainContent_txtCustomerId")).SendKeys("HelloWorld");
}

是因为Frame(1)不是我想要的帧吗?或者我应该使用不同的方式进入它?

谢谢

3 个答案:

答案 0 :(得分:6)

此代码也会切换到'src'属性为'/ somesrc'且'id'属性不是'unloadFrame'

的框架
driver.SwitchTo().Frame(driver.FindElement(By.Xpath("//frame[@src='/somesrc' and not(@id='unloadFrame')]")));

答案 1 :(得分:2)

我正在编写这种简单的方法在iframe中输入文字。

public void SwitchToIframeandEnterText(IWebElement frame, 
                                     IWebElement field, string txt)
    {
        Driver.SwitchTo().Frame(frame);
        field.SendKeys(txt);
        Driver.SwitchTo().DefaultContent();
    }

其中,

  
      
  • IWebElement frame = Iframe的定位器
  •   
  • IWebElement field =您要输入文字的字段定位器
  •   
  • string txt =您要输入的文字
  •   

答案 2 :(得分:1)

在C#中切换IFrame-

  1. 索引
  2. ID或名称
  3. 网络元素

例如-

  1. driver.SwitchTo()。Frame(0);

  2. driver.SwitchTo()。DefaultContent();

  3. IWebElement element = driver.FindElement(By.Id(“ ElementID”));

  4. driver.SwitchTo()。ParentFrame();