Selenium Webdriver——操作隱藏的元素(三)switchTo().frame()


在web 應用中經常會遇到frame 嵌套頁面的應用,頁WebDriver 每次只能在一個頁面上識別元素,對
於frame 嵌套內的頁面上的元素,直接定位是定位是定位不到的。這個時候就需要通過switch_to_frame()
方法將當前定位的主體切換了frame 里。

 

在上面的html 代碼中通過iframe 表單嵌入一個百度頁面,通過瀏覽器打開如下圖

圖4.9 iframe 嵌入百度首頁
這個時候直接定位百度的輸入框一定會報找不到元素的錯誤。那么可以使用switchTo().frame()先找到
frame.html 中的<iframe>標簽,然后再定位百度輸入框。

package com.mypro.jase;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class frame {
     public static void main(String[] args) throws InterruptedException {
          WebDriver driver = new ChromeDriver();
          File file = new File("E:/jase/frame.html");
          String filePath = file.getAbsolutePath();
          driver.get(filePath);
          //切換到iframe(id = "if")
          driver.switchTo().frame("if");
          driver.findElement(By.id("kw")).sendKeys("webdriver");
          driver.findElement(By.id("su")).click();
          Thread.sleep(5000);
          driver.quit();
     }
}

switchTo().frame()默認可以直接取表單的id 或name 屬性進行切換。如:

//id = "if"
driver.switchTo().frame("if");
//name="nf"
driver.switchTo().frame("nf");

 

那么如果iframe 沒有可用的id 和name 可以通過下面的方式進行定位:

//先通過xpth 定位到iframe
WebElement xf = driver.findElement(By.xpath("//iframe[@id='if']"));
driver.switchTo().frame(xf);


//退回上一級表單
driver.switchTo().defaultContent();

 

如果完成了在當前表單上的操作可以通過switchTo().defaultContent()方法返回到上一層表單。該方法
不用指定某個表單的返回,默認對應與它最近的switchTo().frame()方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM