提问者:小点点

Selenium Webdriver-无法在第二个子iframe(具有动态名称)中找到任何元素


![子帧具有动态名称/id][1]

浏览器-IE8

我必须在第二个子iframe中找到一个提示框。

父iframe具有固定的id.Able来查找使用driver. SwitchTo().frame(0)第一个子iframe具有动态名称/id。cframe_ms_id59。只有最后一部分改变。即id59我能够使用xpathdriver.findElement(By.xpath("//iframe[包含(@id,'cframe_ms']")找到这个元素

但是我的提示框有一个文本框驻留在第二个孩子iframe(绿色)****具有动态名称/id。**我无法进入这个iframe,也无法找到里面的任何元素。

Plz suggest some solution

这里是超文本标记语言代码结构-

<html>
    <head>
    <body>
    <iframe id="adviseDesktop" src="...//path">**//Parent Iframe-Able to 
      |                       find this iframe using          driver.switchto().frame(0)**
      |------ <html>
              <head>
               <body class="desktopbody" id="desktop body">
                |                   ------code----
                |                   ------------code---
                |------------  <iframe name="cframe_ms_id59" id="cframe_ms_id59" src='abc.jsp">**//first child iframe last part of name and id changing dynamically**
                |                    -------------
                |                     ------------
                |------------- <table class="mdiwindow" id =dwindow_ms_99"
                                        |            <tr height="100%">
                                        |--- <td class="mdiwindowContent">
                                               |-- <iframe name="cframe_ms_id54" id="cframe_ms_id54" src="/xysx/modal/desktop/main.jspx">**//Second child iframe  last part of name and id changing dynamically.IFrame where our text box of prompt box resides**                                  |
                                                      |------------
                                                      | -----------------
                                                      |-----  <input name=balance_val class="x27" id="balance_val>**//textbox**

共2个答案

匿名用户

我认为它对你有用。在键入此代码行之前从子帧获取xpath-

驱动程序。切换到()。框架(1);

比您切换到子框架,这样您就可以轻松获得子框架元素的xpath或class/id。

返回默认帧类型此代码行-

驱动程序。切换到()。默认内容();

你附上的截图在哪里??

匿名用户

查看超文本标记语言,您似乎在包含要查找的输入的iframe中有一个iframe。为此,您需要依次切换到帧。请参阅下面的C#代码。

var textbox = driver.SwitchTo()
                .Frame("adviseDesktop")    //control in frame with id="adviseDesktop"
                .SwitchTo()
                .Frame(1)                  //control in frame with id="cframe_ms_id54"
                .FindElement(By.Id("balance_val")); //input with id="balance_val"

完成该框架中的操作后,您需要切换到默认内容。

    //control in frame with id="cframe_ms_id54"
    _driver.SwitchTo()
                     .ParentFrame() //control in frame with id="adviseDesktop"
                     .SwitchTo()
                     .DefaultContent(); //control in topmost body of the document