掌握核心原理,轻松解决自动化测试的iframe定位问题

掌握核心原理,轻松解决自动化测试的iframe定位问题

下图是你要定位的元素,其xpath路径为/html/body/div[2]/div[1]/table/tbody/tr[1]/td[2],我们在定位该元素的时候,如果直接使用xpath法来定位,是会提示NoSuchElement的,那该如何解决呢?
在这里插入图片描述
答案就是检查页面上是否有ifame嵌套,可以看到,浏览器的当前页面是有个iframe的在这里插入图片描述
遇到这种iframe该如何操作呢?

(一)基本用法

1.首先找到iframe的定位

WebElement iframe=driver.findELement(By.xpath(//*[@id="admin-body"]/div/div/div[2]/iframe”))

2.然后切换到iframe里面

driver.switchTo().frame(iframe);

3.定位目标元素

WebElement target=driver.findELement(By.xpath(/html/body/div[2]/div[1]/table/tbody/tr[1]/td[2]))

这就是iframe的基本使用方法。实际应用过程中,我们遇到的iframe的情况可能不是这么简单,但万变不离其宗,掌握核心原理即可熟练运用。

iframe切换的核心原理是:先切换到父级,再切换到子级。

  • a:由父级切换到子级时:可直接切换
  • b:由子级切换到父级时:必须先切换到defaultContent,然后再切换到父级
  • c:同一个父级,不同子级之间切换时:组合上面两个步骤,先b再a

下面我们来具体理解一下:
(二)多个iframe嵌套

<html>

<....>               ------------------------>A

<iframe id=”iframe1”>

<html>

<....>               ------------------------>B

<iframe id=”iframe2”>

<html>

<....>               ------------------------>C

</iframe>

</iframe>

<iframe id=”iframe3”>

<html>

<....>                ------------------------>D

</iframe>

</html>

A是iframe框架外的元素

B是iframe1里面的元素

C是iframe2里面的元素

D是iframe3里面的元素

这种情况下,iframe1和iframe3的父级就是defaultContent;iframe2的父级就是iframe1,那如何在iframe1、2、3之间切换呢?

(1)由A切换到iframe1

driver.switchTo().frame(iframe1);

(2)由A切换到iframe2

driver.switchTo().frame(iframe1);

driver.switchTo().frame(iframe2);

(3)由A切换到iframe3

driver.switchTo().frame(iframe3);

(4)由iframe2切换到iframe1

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe1);

(5)由iframe2切换到iframe3

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe3);

(6)由iframe3切换到iframe1

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe1);

(7)由iframe3切换到iframe2

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe1);

driver.switchTo().frame(iframe2);

(8)由iframe1切换到iframe2

driver.switchTo().frame(iframe2);

(9)由iframe1切换到iframe3

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe3);

(三)存在多个不同的iframe但页面只显现1个

<html>

<....>

<iframe id=”iframe1”>  ===><iframe id=”iframe2”>

</iframe>

</html>

那如何在iframe1、2之间切换呢?

(1)由iframe2切换到iframe1

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe1);

(2)由iframe1切换到iframe2

driver.switchTo().defaultContent();

driver.switchTo().frame(iframe2);

文章原创,以自己做自动化测试过程中遇到的问题及解决思路和步骤,供大家思考,以期抛砖引玉,共同进步和提高。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初心与使命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值