selenium+java多层级frame切换的问题

 

  关于selenium多层iframe切换,及iframe没有id和name属性的情况下进行切换的问题。(如下图:)

 

 

  问题:  

  1. 在切入到frame:left中后,直接切换其他同级和上级frame报错

  2. 在切入到frame:left中后,再切换到它下面的frame:index时后无法直接定位要获取的div如上图

 

  原因分析:

  问题1:在切入到frame:left中后,要切换到与left同级的frame:index中,需先切回到初始状态defaultContent。然后再逐级向内层的frame中切换

  问题2:在切入到内层的frame:index中后,发现还有一个iframe没有名称和id,需要先切换到该iframe中才能定位到需要的div

 

  代码如下:

  

复制代码
 1 public class testFrame {  
 2   
 3     private WebDriver driver;  
 4     private String baseUrl;  
 5     private WebDriverWait wait;  
 6   
 7     @Before  
 8     public void setUp() {  
 9         driver = new FirefoxDriver();  
10         baseUrl = "http://XXXX";  
11         wait = new WebDriverWait(driver, 5);  
12         driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
13     }  
14   
15     @Test  
16     public void testFrame() throws InterruptedException {  
17         driver.get(baseUrl);  
18         wait.until(new ExpectedCondition<WebElement>() {  
19   
20             @Override  
21             public WebElement apply(WebDriver d) {  
22                 // TODO Auto-generated method stub  
23                 return d.findElement(By.tagName("frame"));  
24             }  
25   
26         });  
27         driver.switchTo().frame("index");  
28         driver.switchTo().frame("mainindex");  
29         driver.switchTo().frame("left");  
30         driver.findElement(By.xpath("//li[2]/span")).click();  
31         driver.findElement(By.xpath("//li[3]/span")).click();  
32         driver.findElement(By.xpath("//li[3]/ul/li/a/span")).click();  
33         driver.switchTo().defaultContent();  
34         driver.switchTo().frame("index");  
35         driver.switchTo().frame("mainindex");  
36         driver.switchTo().frame("index");  
37         driver.switchTo().frame(driver.findElement(By.tagName("iframe")));  
38         driver.findElement(By.xpath("/html/body/div/div"));  
39     }  
40   
41     @After  
42     public void tearDown() {  
43         driver.quit();  
44     }  
45 }  
复制代码

 

posted @   碎冰  阅读(2458)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示