我有一个'Registration.java'类,我在其中定义了一个web元素,如下所示:
WebElement regForm = driver.findElement(By.xpath("html/body/div[2]/div[1]/div/form"));
List<WebElement> inputFields = regForm.findElements(By.xpath(".//div[@class='form-con']/input"));
另一个类'Validations.java':
List<WebElement> errors = **regForm**.findElements(By.xpath(".//div[@class='error-container']/small"));
for(int i = 0; i < inputFields.size(); i++){
**inputFields**.get(i).sendKeys("");
driver.findElement(By.xpath(".//div[@class='signin-con']/input")).click(); }
在上面的例子中,'Registration.java'类有web元素对象'regForm'和'inputFields'。我不想在第二节中再次定义相同的内容。所以,那些web元素想要在另一个类'Validations.java'中使用。但是,Java程序在第二类中显示错误'对象无法解决'。如何在不重新定义的情况下调用这些元素?
答案 0 :(得分:0)
您可以使用getter和setter或公共静态变量来解决问题
使用Getters
您可以在Registration.java中为变量创建getter和setter,如下所示。
private WebElement regForm;
private List<WebElement> inputFields;
public WebElement getRegForm(){
regForm = driver.findElement(By.xpath("html/body/div[2]/div[1]/div/form"));
return regForm;
}
public List<WebElement> getInputFields(){
inputFields = regForm.findElements(By.xpath(".//div[@class='form-con']/input"));
}
从Validations.java文件中,您需要调用各自的getter。
Registration registration = new Registration();
WebElement regForm = registration.getRegForm();
使用全局静态变量
您可以将Registration.java中的变量定义为public static:
public static WebElement regForm = driver.findElement(By.xpath("html/body/div[2]/div[1]/div/form"));
public static List<WebElement> inputFields = regForm.findElements(By.xpath(".//div[@class='form-con']/input"));
并在其他类中访问它们:
WebElement regForm = Registration.regForm;
第一个选项是处理这种东西的最佳方法。但第二种选择也有效。 作为学习过程,我认为你应该真正关注Selenium中的页面对象模式。这对你有很大的帮助。在tutorialspoint中有一个很好的教程。 http://www.tutorialspoint.com/selenium/selenium_page_object_model.htm