Java 在Selenium WebDriver测试中使用页面对象时定义Xpath时出现问题
硒新手在这里。。。我正在尝试创建我的第一个测试框架 考试网站: 测试用例:Java 在Selenium WebDriver测试中使用页面对象时定义Xpath时出现问题,java,selenium,selenium-webdriver,pageobjects,Java,Selenium,Selenium Webdriver,Pageobjects,硒新手在这里。。。我正在尝试创建我的第一个测试框架 考试网站: 测试用例: 打开浏览器并输入网页 加载页面后,单击MyAccount->Login 我在我的页面对象类中使用了xpath,脚本将只运行到启动网页为止。它无法单击登录链接 我已经尝试包含一个隐式等待,假设加载页面所花费的时间比平常长。即便如此,问题依然存在 你能帮我理解什么是正确的xpath吗 代码: POM_HomePage.java package PageObjects; import org.openqa.selenium.
package PageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class POM_HomePage {
WebDriver driver;
public POM_HomePage(WebDriver driver) {
this.driver=driver;
PageFactory.initElements(driver, this);
}
@FindBy(xpath="//*[@id='li_myaccount']/ul/li[1]/a")
WebElement LinkMyAccount;
public WebElement clickMyAccount() {
return LinkMyAccount;
}
}
HomePage.java
package TestGroupID;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.Test;
import PageObjects.POM_HomePage;
import Resources.MasterScript;
public class HomePage extends MasterScript{
@Test
public void SignIn() throws IOException {
driver=LoadBrowser();
LoadPropFile();
driver.get(prop.getProperty("test_website"));
POM_HomePage pomHome=new POM_HomePage(driver);
driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
if (pomHome.clickMyAccount().isDisplayed()) {
pomHome.clickMyAccount().click();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
}
}
}
根据您提到的问题,页面加载后,单击MyAccount->Login。因此,您应该在两个单独的Web元素上调用
click()
方法。但是您的POM_HomePage.java
只返回一个web元素作为@FindBy(xpath=“/*[@id='li\u myaccount']]/ul/li[1]/a”)
解决方案
- 在
中定义两个WebElement和两个相关的POM_HomePage.java
,如下所示:函数()
@Test public void SignIn() throws IOException { driver=LoadBrowser(); LoadPropFile(); driver.get(prop.getProperty("test_website")); POM_HomePage pomHome=new POM_HomePage(driver); driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS); if (pomHome.clickMyAccount().isDisplayed()) { pomHome.clickMyAccount().click(); } if (pomHome.clickLogin().isDisplayed()) { pomHome.clickLogin().click(); } }
- 我的帐户链接
@FindBy(xpath="//div[@class='navbar']//li[@id='li_myaccount']/a") WebElement LinkMyAccount; public WebElement clickMyAccount() { return LinkMyAccount; }
- 登录链接
@FindBy(xpath="//div[@class='navbar']//li[@id='li_myaccount']//ul[@class='dropdown-menu']/li/a[contains(.,'Login')]") WebElement LinkLogin; public WebElement clickLogin() { return LinkLogin; }
- 我的帐户链接
- 在
中调用HomePage.java
和isDisplayed()
,这两个Web元素如下所示:单击()
@Test public void SignIn() throws IOException { driver=LoadBrowser(); LoadPropFile(); driver.get(prop.getProperty("test_website")); POM_HomePage pomHome=new POM_HomePage(driver); driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS); if (pomHome.clickMyAccount().isDisplayed()) { pomHome.clickMyAccount().click(); } if (pomHome.clickLogin().isDisplayed()) { pomHome.clickLogin().click(); } }