Selenium + Java - 无法在页面

时间:2015-12-13 19:44:47

标签: java selenium paypal

我正在为工作做一些自动化工作,现在我正试图通过我们的店面自动购买,这应该转到paypal沙箱并完成购买。一切看起来都不错,我知道一般流程有效,但是当我到达第一个PayPal页面时,我无法找到webElements。

流程的PayPal端包含2页。一个用于输入登录信息,另一个用于确认购买。第二页工作得很好,但第一页总是给我"无法找到元素"当我告诉它寻找电子邮件/密码字段和登录按钮时。如果让驱动程序打印出当前URL以进行调试,它会正确打印payPal URL,以便查看正确的站点。我也尝试了30秒的延迟,以确保它不是一个时间问题,我得到同样的问题。

这是有问题的课程文件:

public class PayPalLoginPage extends AbstractPaymentPage {
    //AbstractPaymentPage extends from AbrstractPageObject

      private WebElement email; //Element ID is email
      private WebElement password; //Element ID is password
      @FindBy(id = "btnLogin")
      private WebElement loginButton;

      public PayPalLoginPage(WebDriver driver) {
        super(driver);
        PageFactory.initElements(driver, this);
      }


      public PayPalPurchaseConfirmationPage login (PayPalInfo payPalInfo) {
        email.sendKeys(payPalInfo.getEmail());
        password.sendKeys(payPalInfo.getPassword());
        loginButton.click();
        this.waitForPayPalLoadingCurtainToDisappear();
        return new PayPalPurchaseConfirmationPage(this.getDriver());
      }

我打电话给这个班的方式是这样的:

case PAYPAL_PURCHASE:
  setDriver(new PayPalLoginPage(getDriver()).login(getPaymentMethod()).confirmPayPalPurchase());
  break;

因此,流程完美运行直到它到达第一个payPal页面,它就停止说它找不到这3个元素中的任何一个。如果我将它设置为只是在那里等待并手动填写信息,那么它会在下一页上选择并从中开始工作(查找第二个payPal页面上的所有元素并对其进行操作)。

如果我将findElement.By行放在login方法中,并且无论我是否尝试使用id,name,xpath或css查找它们,我都会得到相同的结果。

对于我可能遗失的任何想法?

1 个答案:

答案 0 :(得分:0)

您只是将电子邮件和关注内容定义为WebElement,但不将其分配给任何webelement。请参阅以下内容:

private WebElement email = driver.findElement(By.id("email_text_box_id"));
private WebElement password = driver.findElement(By.id("password_text_box_id"));
private WebElement loginbutton = driver.findElement(By.id("login_button_id"));

如果您希望PageObject分配WebElements,则需要调用案例中的initElement

public class PayPalLoginPage extends AbstractPaymentPage {
//AbstractPaymentPage extends from AbrstractPageObject

  private WebElement email; //Element ID is email
  private WebElement password; //Element ID is password
  @FindBy(id = "btnLogin")
  private WebElement loginButton;

  public PayPalPurchaseConfirmationPage login (PayPalInfo payPalInfo) {
    email.sendKeys(payPalInfo.getEmail());
    password.sendKeys(payPalInfo.getPassword());
    loginButton.click();
    this.waitForPayPalLoadingCurtainToDisappear();
    return new PayPalPurchaseConfirmationPage(this.getDriver());
  }
}

调用PayPal登录功能:

public class UsingPayPalLoginPage {
    public static void main(String[] args) {
      // Create a new instance of a driver
      WebDriver driver = new HtmlUnitDriver();

      // Create a new instance of the PayPall page
      // and initialise any WebElement fields in it.
      PayPalLoginPage page = PageFactory.initElements(driver, PayPalLoginPage.class);

      // call login of paypal.
      page.login(payPalInfo);
  }
}