Selenium无法切换到iframe

Selenium无法切换到iframe,iframe,selenium,webdriver,automated-tests,Iframe,Selenium,Webdriver,Automated Tests,我很缺硒,但两天来我找不到解决办法。我在iframe中有代码,我无法访问它。 加载网站时,iframe包含: <div id="ext-gen98" class="x-panel-body x-panel-body-noheader"> <iframe id="viewContent_iframe" class=" x-managed-iframe" width="100%" height="100%" src="/archibus/schema/ab-

我很缺硒,但两天来我找不到解决办法。我在iframe中有代码,我无法访问它。 加载网站时,iframe包含:

<div id="ext-gen98" class="x-panel-body x-panel-body-noheader">
            <iframe id="viewContent_iframe" class=" x-managed-iframe" width="100%" height="100%" src="/archibus/schema/ab-products/tests/alerts/ex-ekran-start.axvw" name="viewContent_iframe" style="border: medium none; height: 79px; width: 965px;">
                #document
                    <html id="ext-gen9" class=" x-viewport" webdriver="true">
                        <head></head>
                        <body id="ext-gen10" class="body ext-gecko x-border-layout-ct" margin="0 0 0 0" style="position: relative;">
                            <div id="ext-comp-1004" class="x-panel x-border-panel x-panel-noborder" style="left: 0px; top: 0px; width: 965px;">
                                <div id="ext-gen49" class="x-panel-bwrap">
                                    <div id="ext-gen50" class="x-panel-body x-panel-body-noheader x-panel-body-noborder" style="overflow: auto; width: 965px; height: 79px;"></div>
                                </div>
                            </div>
                            <div id="AFM_CALENDAR" style="position:absolute;display:none;background-color:white;layer-background-color:white;border:1px solid black;z-index:9999"></div>
                            <iframe id="AFM_CALENDAR_IFRAME" frameborder="0" src="javascript:false;" scrolling="no" style="position:absolute;top:0px;left:0px;display:none;"></iframe>
                            <div id="logger"></div>
                            <div id="viewToolbar_layoutWrapper"></div>
                            <div id="view_layoutWrapper"></div>
                        </body>
                    </html>
            </iframe>
        </div>

#文件
程序选择并单击链接:

<span id="task_4" class="leafnodes_text" style="background-image: url(&quot;http://architest:8080/archibus/schema/ab-system/graphics/ab-icon-tree-selected.gif&quot;);">Tasks</span> 
任务
我知道在这个新视图(*axvw)加载到iframe之后

<iframe id="viewContent_iframe" class=" x-managed-iframe" width="100%" height="100%" src="/archibus/schema/ex_wymiar03.axvw" name="viewContent_iframe" style="border: medium none; height: 79px; width: 965px;">

#document
    <html class=" x-viewport" webdriver="true">
        <head></head>
        <body id="ext-gen9" class="body ext-gecko x-border-layout-ct" margin="0 0 0 0" style="position: relative;">
            <div id="ext-comp-1006" class="x-panel x-border-panel x-panel-noborder" style="left: 0px; top: 28px; width: 965px;">
                <div id="ext-gen91" class="x-panel-bwrap">
                    <div id="ext-gen92" class="x-panel-body x-panel-body-noheader x-panel-body-noborder x-border-layout-ct" style="width: 965px; height: 51px; position: relative;">
                        <div id="leftRegion" class="x-panel x-border-panel x-panel-noborder" style="width: 338px; left: 0px; top: 0px;">
                            <div id="ext-gen95" class="x-panel-bwrap">
                                <div id="ext-gen96" class="x-panel-body x-panel-body-noheader x-panel-body-noborder" style="width: 338px; height: 51px;">
                                    <div id="mainLayout_west_div">
                                        <div id="konfigPanel_layoutWrapper" class="">
                                            <div id="konfigPanel_head" class="panelToolbar"></div>
                                            <div id="konfigPanel" style="width: 100%; overflow: auto; height: 22px;"></div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div id="rightUpRegion" class="x-panel x-border-panel x-panel-noborder" style="left: 343px; top: 0px; width: 622px;"></div>
                        <div id="viewLayout_center_div"></div>
                        <div id="leftRegion-xsplit" class="x-layout-split x-layout-split-west x-splitbar-h" title="Drag to resize." style="left: 338px; top: 0px; height: 51px;"></div>
                    </div>
                </div>
            </div>

#文件
我尝试切换到()以及我在网络中找到的所有内容。 例如,我需要获得使用css类的所有位置的数量:x-panel x-border-panel x-panel-noborder

我的代码:

公开课考试{

private WebDriver driver;
private WebDriverWait wait;
private String login = "login";
private String pass  = "pass";

@Before
public void setUp() throws Exception {      
    driver = new FirefoxDriver();   
}


  @Test
  public void testtestclass() throws Exception {
        driver.manage().window().maximize();
         //Open Home Page
         driver.get("http://architest:8080/archibus");
         Thread.sleep(2000);

         driver.findElement(By.id("username_input")).sendKeys(login);
         Thread.sleep(2000);

         driver.findElement(By.id("password_input")).sendKeys(pass);
         Thread.sleep(2000);

         driver.findElement(By.id("signin_button")).click();
         Thread.sleep(3000);

         driver.findElement(By.id("product_0")).click();
         Thread.sleep(2000);

         driver.findElement(By.id("activity_0")).click();
         Thread.sleep(2000);

         driver.findElement(By.id("process_2")).click();
         Thread.sleep(2000);

         driver.findElement(By.id("task_4")).click();
         Thread.sleep(2000);

         driver.switchTo().frame(driver.findElement(By.id("viewContent_iframe")));

         List <WebElement> x = driver.findElements(By.cssSelector("x-panel x-border-panel x-panel-noborder"));

         System.out.println("" + x.size());


         Thread.sleep(3000);
         driver.switchTo().defaultContent();
  }


  @After
  public void tearDown() throws Exception {
    driver.quit();
    }
私有WebDriver;
私人网络驱动器,它等待;
私有字符串login=“login”;
私有字符串pass=“pass”;
@以前
public void setUp()引发异常{
驱动程序=新的FirefoxDriver();
}
@试验
public void TestClass()引发异常{
driver.manage().window().maximize();
//打开主页
驱动程序。获取(“http://architest:8080/archibus");
《睡眠》(2000年);
driver.findElement(By.id(“用户名输入”)).sendKeys(登录);
《睡眠》(2000年);
驱动程序.findElement(通过.id(“密码输入”)).sendKeys(通过);
《睡眠》(2000年);
driver.findElement(By.id(“登录按钮”))。单击();
睡眠(3000);
driver.findElement(By.id(“product_0”))。单击();
《睡眠》(2000年);
driver.findElement(By.id(“活动0”))。单击();
《睡眠》(2000年);
driver.findElement(By.id(“process_2”))。单击();
《睡眠》(2000年);
driver.findElement(By.id(“task_4”))。单击();
《睡眠》(2000年);
driver.switchTo().frame(driver.findElement(By.id(“viewContent_iframe”));
列表x=驱动程序.findElements(由.cssSelector(“x-panel x-border-panel x-panel-noborder”);
System.out.println(“+x.size());
睡眠(3000);
driver.switchTo().defaultContent();
}
@之后
public void tearDown()引发异常{
driver.quit();
}
}

谢谢你的帮助

通过.cssSelector(“x-panel x-border-panel x-panel-noborder”)

看来你们的定位仪错了。应该是

By.CssSelector(".x-panel .x-border-panel .x-panel-noborder")

当切换到帧时,不必使用驱动程序来查找元素。与此相反:

driver.switchTo().frame(driver.findElement(By.id("viewContent_iframe")));
您只需使用ID即可执行以下操作:

driver.switchTo().frame("viewContent_iframe");
另外,您是否尝试过搜索类名以查找所需的元素?比如:

List <WebElement> x = driver.FindElements(By.ClassName("x-panel x-border-panel x-panel-noborder"))
List x=driver.FindElements(按.ClassName(“x-panel x-border-panel x-panel-noborder”))

祝你好运

你的两秒钟等待够长吗?我会尝试使用动态等待,所以在iframe实际可见之前不要尝试切换。非常感谢您提供的所有答案。多亏了他们,我才发现了问题