1. 程式人生 > >selenium+java多層級frame切換的問題

selenium+java多層級frame切換的問題

path 層級 ram java 代碼 html unit nbsp ive

  關於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 }

selenium+java多層級frame切換的問題