Java+Selenium3自动化测试入门10--iframe操作

好,对于iframe的介绍暂且不说,我们在日常的测试脚本中经常会遇到一些元素定位不到,其实元素定位不到的原因无非就那几个,要么元素设置了不可见,要么你定位的路径或者方法错误,还有一个就是我们今天要说的iframe。

IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内

框架)

那么一般我们是如何去看页面是否存在iframe呢,该如何去判断我们的元素是不是因为iframe不同才导致的元素定位失败呢?

其实之前我们也介绍过,有一个非常方便的火狐插件---Firebug,当然这个插件现在只支持53版本等以下的火狐浏览器了,版本过

高是无法安装的

我们来看下一个案例:https://data.pharmacodia.com/web/homePage/index?ns=1&ts=1&str=YWSJ

这个网站就包含了一个正常的TOP window  和一个 iframe内联框架,可以看到左侧的列表是在一个top window 中

 

Java+Selenium3自动化测试入门10--iframe操作_第1张图片

而右侧的元素我们可以看到是在一个iframe名为 # rightMain的内联框架中,所以我们可以先采用常规的定位方式测试一下

Java+Selenium3自动化测试入门10--iframe操作_第2张图片

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class FrameSwitch {
	
	public static void main(String[] args) throws Exception {    
           
             
        WebDriver driver = new FirefoxDriver();    
       
        driver.manage().window().maximize();    
         
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
            
        driver.get("http://data.pharmacodia.com/web/homePage/index?ns=1&ts=1&str=YWSJ");    
         
        Thread.sleep(1000);  
        
        /*切换到frame内部,如果不切换到frame内部,则会报No such element这个元素
        frame 有几个方法1.根据索引去识别 2. 根据id/name去识别,3.根据frame内部元素去识别
        */
     //   driver.switchTo().frame("rightMain");
        //点击化学药这个元素
        WebElement element = driver.findElement(By.xpath("//*/span[@title='化学药']"));
        element.click();
        System.out.println("点击化学药品成功");
 }
}

Java+Selenium3自动化测试入门10--iframe操作_第3张图片

运行下程序,发现报错:抛出了NO Such ElementException异常,告诉我们找不到 xpath为下面的这个元素,其实主要原因就是我们没有切换iframe,还是继续在top window中去找,肯定找不到这个元素的,因为这个元素在另一个iframe中,那么下面我们来操作下切换到iframe内中再来操作这个元素试试,当我们进入到iframe中操作完元素,想要再操作外层元素的时候,此时我们需要跳出iframe[ driver.switchTo().defaultContent();]就可以操作外层元素了

//*/span[@title='化学药']
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class FrameSwitch {
	
	public static void main(String[] args) throws Exception {    
           
             
        WebDriver driver = new FirefoxDriver();    
       
        driver.manage().window().maximize();    
         
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
            
        driver.get("http://data.pharmacodia.com/web/homePage/index?ns=1&ts=1&str=YWSJ");    
         
        Thread.sleep(1000);  
        
        /*切换到frame内部,如果不切换到frame内部,则会报No such element这个元素
        frame 有几个方法1.根据索引去识别 2. 根据id/name去识别,3.根据frame内部元素去识别
        */
        driver.switchTo().frame("rightMain");
        //点击化学药这个元素
        WebElement element = driver.findElement(By.xpath("//*/span[@title='化学药']"));
        element.click();
        System.out.println("点击化学药品成功");
 

//      切换到topWindows,点击弹出的去登录按钮       
        driver.switchTo().defaultContent();
        driver.findElement(By.xpath(".//*[@id='noLoginAlert']/div/button")).click();
        System.out.println("登录页面跳转成功");
        
       
	}

}

可以看到我们已经成功的定位到了这个元素,并且成功跳转到了登录页面

That's all.....

你可能感兴趣的:(selenium+java入门,selenium,frame,操作,元素定位失败,iframe)