硒+;Java-无法在页面中找到WebElements
我正在做一些自动化的工作,现在我正试图通过我们的店面自动购买,应该去贝宝沙箱完成购买。一切看起来都很好,我知道一般流程是可行的,但当我进入第一个PayPal页面时,我很难找到webElements 流程的PayPal端由2页组成。一个用于输入登录信息,另一个用于确认购买。第二个页面工作得很好,但当我告诉第一个页面查找电子邮件/密码字段和登录按钮时,它总是给我“找不到元素”。如果让驱动程序出于调试目的打印出当前URL,它会正确打印payPal URL,这样它就可以查看正确的站点。我还尝试了30秒的延迟,以确保这不是一个时间问题,我得到了同样的问题 下面是有问题的类文件:硒+;Java-无法在页面中找到WebElements,java,selenium,paypal,Java,Selenium,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页面,并且它不再说它找不到这三个元素中的任何一个,流程才能完美地工作。如果我将它设置为只在那里等待,然后手动填充信息,那么它会在下一页上立即开始工作(在第二个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())代码>我仍然得到元素未找到异常。。。我不知道我做错了什么>。