Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
硒+;Java-无法在页面中找到WebElements_Java_Selenium_Paypal - Fatal编程技术网

硒+;Java-无法在页面中找到WebElements

硒+;Java-无法在页面中找到WebElements,java,selenium,paypal,Java,Selenium,Paypal,我正在做一些自动化的工作,现在我正试图通过我们的店面自动购买,应该去贝宝沙箱完成购买。一切看起来都很好,我知道一般流程是可行的,但当我进入第一个PayPal页面时,我很难找到webElements 流程的PayPal端由2页组成。一个用于输入登录信息,另一个用于确认购买。第二个页面工作得很好,但当我告诉第一个页面查找电子邮件/密码字段和登录按钮时,它总是给我“找不到元素”。如果让驱动程序出于调试目的打印出当前URL,它会正确打印payPal URL,这样它就可以查看正确的站点。我还尝试了30秒的

我正在做一些自动化的工作,现在我正试图通过我们的店面自动购买,应该去贝宝沙箱完成购买。一切看起来都很好,我知道一般流程是可行的,但当我进入第一个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页面,并且它不再说它找不到这三个元素中的任何一个,流程才能完美地工作。如果我将它设置为只在那里等待,然后手动填充信息,那么它会在下一页上立即开始工作(在第二个payPal页面上查找所有元素并执行操作)

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


知道我会错过什么吗

您只是将电子邮件和以下内容定义为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);
  }
} 

只要变量的名称与元素的ID相同或名称为“PageFactory.initElements(driver,this);”行,默认情况下就应该执行该赋值。我在所有其他pageObject类中都以同样的方式使用它,而且它很有效。感谢更新,但我得到了相同的错误<代码>案例PAYPAL\u购买:PayPalLoginPage PayPalLoginPage=PageFactory.initElements(getDriver(),PayPalLoginPage.class);setDriver(payPalLoginPage.login((PayPalInfo)customerInfo.getPaymentMethod()).confirmPayPalpPurchase());中断仍然返回“找不到元素”消息。使用
setDriver(新建PayPalLoginPage(getDriver()).login(getPaymentMethod()).confirmPayPalpPurchase())
您正在调用page类您需要使用PayPallogInPage调用
谢谢,但我添加了新类,我仍然有相同的问题。我还尝试删除所有pageFactory内容,并在登录方法开始时简单地执行此操作:
email=webDriver.findElement(By.id(“email”);email.sendKeys(payPalInfo.getEmail())我仍然得到元素未找到异常。。。我不知道我做错了什么>。