来自属性文件的Selenium WebDriver和PageFactory初始化WebElement

时间:2015-01-24 08:14:22

标签: java xml selenium selenium-webdriver selenium-ide

我正在使用selenium WebDiver和PageFacotry初始化webelement,但我想在运行时初始化元素,但值应该来自xml文件或属性文件。

下面的语句初始化LogIn_PG_POF所有在LogIn_PG_POF类中声明的元素,但我想从属性文件或xml文件初始化如何(它是FindBy注释的属性)部分,以便稍后我可以轻松更改,无需更改在代码部分。

LogIn_PG_POF LoginPage = PageFactory.initElements(driver, LogIn_PG_POF.class);

这是一个LogIn_PG_POF

public class LogIn_PG_POF {

    final WebDriver driver;

    @FindBy(how = How.ID, using = "log")
    public WebElement txtbx_UserName;

    @FindBy(how = How.ID, using = "pwd")
    public WebElement txtbx_Password;

    @FindBy(how = How.NAME, using = "submit")
    public WebElement btn_Login ;

    // This is a constructor, as every page need a base driver to find web elements
    public LogIn_PG_POF(WebDriver driver){ 
        this.driver = driver; 
    } 

}

3 个答案:

答案 0 :(得分:0)

我自己没有做过,但我相信你可以通过一些自定义课程来完成。 PageFactory有一个initElements方法,它采用ElementLocatorFactory

如果您创建自定义ElementLocatorFactory,ElementLocator和自定义属性类,则可以使用ElementLocator通过自定义标记识别这些元素,并从属性文件中提取查找信息。

然后使用您自己的元素定位器工厂调用页面工厂:

LogIn_PG_POF page = new LogIn_PG_POF(driver);
ElementLocatorFactory factory = new CustomElementLocatorFactory(driver);
PageFactory.initElements(factory, page);

答案 1 :(得分:0)

我有类似的要求,我已经创建了自己的注释和PageFactory类。我正在传递注释中的键值,我将在稍后从XML中获取值,而在PageFactory类中,在initElements(WebDriver d,Page.class)方法中传递,使用反射检索所有使用自定义注释注释的字段,获取值然后从XML中检索相应的值并实例化该类的每个元素。它还可以灵活地从XML本身传递id,css等定位器类型。

最近了解了硒中的ElementLocator,但我不知道如何使用它。没有找到任何关于其用途的好主题

答案 2 :(得分:-2)

你的问题不是很清楚。

根据我的理解,我认为你想从属性文件或XML文件传递元素id。

以下示例代码可以帮助您。为简单起见,此代码不使用pagefactory。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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

public class GoogleSearchUsingSelenium {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.google.com");

        Properties prop = new Properties();
        InputStream input = null;
        try {
            input = new FileInputStream("config.properties");
            prop.load(input);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        String searchBoxId = prop.getProperty("id");
        String searchText = prop.getProperty("searchtext");

        WebElement searchBox = driver.findElement(By.id(searchBoxId));

        searchBox.sendKeys(searchText);

        driver.close();

    }
}