iFrame 定位的思想是先定位到iFrame,再定位iFrame里面的元素。
常用到的3个方法:
select()--------------------------选取要操作的frame
selectParentContainer() ------这个是回到上一层frame的
selectTopPage() ----------------这个是回到顶部页面
具体例子:
1.新建2个html 页面,放于D盘,作为被测试的页面
main.html
- <html>
- <head >
- <title> FrameTest</title >
- </head >
- <body >
- <div id = "id1"> this is a div !</ div>
- <iframe id = "frame" frameborder="0" scrolling="no" style="left :0; position:absolute;" src = "iframe.html"></ iframe>
- </body >
- </html><span style="font-family: Tahoma;"> </span>
iframe.html
- <html>
- <head >
- <title> this is a frame!</title >
- </head >
- <body >
- <div id = "div1"> this is a div !oo! </div>
- <label> input:</label >
- <input id = "input1"></ input>
- </body >
- </html>
2.新建一个Page类,例子类目为P.java,代码如下:
- import com.holmos.webtest.element.TextField;
- import com.holmos.webtest.struct.Frame;
- import com.holmos.webtest.struct.Page;
-
- public class P extends Page {
- public P() {
- super();
- this.comment = "iframe页面";
- this.init();
- }
- // 先定位Frame
- public IFrameTest frame = new IFrameTest( "iframe");
- {
- frame.addIDlocator("frame" );// frame定位用ID定位
- }
- // 定位Frame里面的元素
- public class IFrameTest extends Frame {
- public IFrameTest(String comment) {
- super(comment);
- }
- public TextField input = new TextField( "输入框" );// 定位里面的输入框
- {
- input.addIDLocator("input1" );
- }
- }
- }
新建一个Test类,例子类目为P_Test,代码如下:
- import org.junit.Test;
-
- import com.holmos.webtest.EngineType;
- import com.holmos.webtest.utils.HolmosWindow;
-
- public class P_Test {
- public P p = new P();
-
- @Test
- public void input() {
- HolmosWindow. openNewWindow(EngineType.WebDriverChrome, "D:\\main.html" );
- p.frame .select();// 选取要操作的frame
- p.frame .input.setText( "试试看!能不能输入" );// 操作frame里面的元素
- p.frame .selectTopPage();// 控制器交还给最底层页面
- }
- }
执行结果:
控制台输出: 多层iFrame定位思想是一个样的,一层一层往里边定位。