如何在selenium webdriver中将webelement从一个类调用到另一个类

时间:2015-11-23 07:26:32

标签: selenium-webdriver

我有一个'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程序在第二类中显示错误'对象无法解决'。如何在不重新定义的情况下调用这些元素?

1 个答案:

答案 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