我正在使用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;
}
}
答案 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();
}
}