• Selenium之使用PageFactory初始化pageobject


    使用PageFactory初始化pageobject有什么作用呢,下面举个例子来说明

    public BaiduPage baiduPage = PageFactory.initElements(driver, BaiduPage.class);

    场景:使用selenium 实现自动打开www.baidu.com首页,然后在搜索框内输入“路易”,并点击查找

    环境:win7,X86,IE浏览器,eclipse(安装testng插件)

    步骤一:
    在eclipse中创建一个maven项目,并在pom.xml中引入selenium和testng的依赖

    pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.selelium.css</groupId>
        <artifactId>mycss</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>mycss</name>
    
        <dependencies>
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>2.48.2</version>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.9.9</version>
            </dependency>
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-ie-driver</artifactId>
                <version>2.48.2</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    步骤二:
    创建初始准备类:

    package mycss;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    
    public class InitPre {
    
        protected  WebDriver driver;
        private final String url = "www.baidu.com";
    
        public  InitPre(){
            String IEPath = "C:\Program Files\Internet Explorer\iexplore.exe";
            //String IEPath_64 = "C:\Program Files (x86)\Internet Explorer\iexplore.exe";
            String pro_Path = System.getProperty("user.dir");
            String IEDriver_Path = pro_Path + "\IEDriverServer.exe";
            System.setProperty("webdriver.ie.bin", IEPath);
            System.setProperty("webdriver.ie.driver", IEDriver_Path);
    
            DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
            ieCapabilities.setCapability( InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
            driver = new InternetExplorerDriver(ieCapabilities);
            driver.get(url);
        }
    }

    步骤3:
    将百度首页Pageobject:

    package mycss;
    
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.FindBy;
    
    public class BaiduPage {
    
        @FindBy(id = "kw")
        private WebElement indexInput;
    
        public void clearKeys_indexInput() {
            indexInput.clear();
        }
    
        public void sendkeys_indexInput(String index) {
            indexInput.sendKeys(index);
        }
    
        public void click_indexInput() {
            indexInput.click();
        }
    }

    步骤4:
    通过PageFactory初始化PageObject对象:

    package mycss;
    
    import org.openqa.selenium.support.PageFactory;
    
    public class InitPage extends InitPre {
    
        public BaiduPage baiduPage = PageFactory.initElements(driver, BaiduPage.class);
    
    }

    步骤5:
    编写测试用例:

    package mycss;
    
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    
    public class IndexTest 
    {
    
        IndexTest(){
            System.out.println("IndexTest");
        }
    
        public InitPage initPage=new InitPage();
        BaiduPage baiduPage=initPage.baiduPage;
    
        @BeforeTest
        public void inittest(){
    } @Test
    public void index_test(){ baiduPage.clearKeys_indexInput(); baiduPage.sendkeys_indexInput("路易"); baiduPage.click_indexInput(); } }

    完成上面的步骤后,执行IndexTest类,然后可以看到打开浏览器,进入百度首页,然后搜索“路易”
    查看BaiduPage类可以知道,该类中仅对BaiduPage的控件和方法进行了封装,private WebElement indexInput indexInput并没有实例化,那么执行为什么会不报空指针呢?原因是因为下面的操作,PageFactory.initElements把driver传递给了BaiduPage的对象,当执行到WebElement indexInput indexInput这一步的话,传递的driver会在当前页面中查找该对象。大家可以尝试去掉代码中下面的一步,在执行用例查看运行结果

    public BaiduPage baiduPage = PageFactory.initElements(driver, BaiduPage.class);

    总结:
    Selenium2 引入了PageObject的思想,将每个页面的控件和操作封装成一个个Page类,然后在实现业务逻辑时,只需要调用对应的Page类即可。
    PageFactory则是为了支持PageObject而产生的,可以通过InitElements方法给Page类传递driver,当执行到WebElement时,driver在当前的页面中查找元素,这样不需要对WebElement进行实例化。如下面代码:

    @FindBy(id = "kw")
    private WebElement indexInput;
  • 相关阅读:
    前端二维码生成方式
    svn 本地仓库使用
    layer.open实现图片预览
    基于FreethEarh框架开发的3D综合态势系统
    Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)【转】
    Cesium中DrawCommand使用【转】
    Cesium案例解析(三)——Camera相机[转]
    Cesium.knockout【转】
    Java堆和栈的区别
    Kafka Eagle安装详情及问题解答
  • 原文地址:https://www.cnblogs.com/111testing/p/7104020.html
Copyright © 2020-2023  润新知