我正在为工作做一些自动化工作,现在我正试图通过我们的店面自动购买,这应该转到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查找它们,我都会得到相同的结果。
对于我可能遗失的任何想法?
答案 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);
}
}