框架的概念正在我负责测试的网站上使用。但是,帧不使用帧标记,例如,一个是由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
答案 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