如何使用Selenium Webdriver访问没有框架标签的框架元素?

时间:2015-06-18 08:34:47

标签: selenium iframe selenium-webdriver

框架的概念正在我负责测试的网站上使用。但是,帧不使用帧标记,例如,一个是由GET / POST填充的div。 Selenium无法访问框架内的元素(ElementNotVisibleException),因为它必须首先切换到框架。但是,我不能切换到框架,因为它在技术上不是Selenium眼中的框架。如何在不操作DOM的情况下访问框架的内容? (测试的重点是我们测试作为最终用户的内容并且不更改它)。所以,我不能使用JavaScript执行器。我已经尝试使用动作构建单击元素/移动到元素,但它返回错误。

编辑:

这是我试图访问的html的基本形式。我不能使用selenium访问el1内的任何元素。我需要为el6选择一个选项。

<div id="el1" style="width: 960px; height: 230px; margin-bottom: 6px;">
     <div style="width: 955px;padding: 5px 0px 0px 5px;">
          <span>Text Here</span>
          <form id="el2" action="pageName.jsp?action=blah" method="POST" style="height: 300px;" name="el2">
               <div id="el3" style="width: 600px; margin: 20px 0px 0px 60px;">
                    <div id="el4" style="height: 20px;">
                         <div id="el5" style="height: 20px; padding-left: 40px;">
                              <div style="width: 400px;">
                                   <span style="font-weight: bold;">More Text Here</span>
                              </div>
                              <div style="width: 400px;">
                                   <select id="el6" onchange="javascriptfunction(this)" name="el6" style="width: 400px;">
                                        <option selected="selected" value="">A Select Box Option</option>
                                        <option value="NumberHere">More Options Populated By JSP</option>
                                   </select>
                              </div>
                         </div>                
                    </div>
               </div>
           <!--Some Unnecessary content here-->
          </form>
     </div>
</div>

以下是el6的样式计算。我试图用WebDriver手动调整高度,试图摆脱ElementNotVisibleException。这没用。

font-family MS Shell Dlg
body    Helvetica,​Arial,​Sans-Serif    
div Arial,​Helvetica,​Geneva,​sans-serif    
body    Arial,​Helvetica,​Geneva,​sans-serif    
font-size   13.3333px
div 14px    
body    13px    
color   rgb(0,​ 0,​ 0)
     #container #333    
text-align  start
     #wrapper   left    
     .bodyStyle center  
width   400px
margin-top  0px
margin-right    0px
margin-bottom   0px
margin-left 0px
padding-top 0px
padding-right   0px
padding-bottom  0px
padding-left    0px

2 个答案:

答案 0 :(得分:0)

为什么不能在不指定ID或名称的情况下切换到任何可用的iframe。 你可以这样做,只需切换到iframe ..

试试这个

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe")));

答案 1 :(得分:0)

If you are getting ElementNotVisibleException,it means element is invisible at that time.You can use explicit wait to achieve this :

WebDriverWait wait = new WebDriverWait(driver,<Time>);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("el6"))); 

First,you calculate time which is taken by element to visible and replace with <Time>.

For more detail,you can [see][1].


  [1]: http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp