Selenium newbie here ...我正在尝试创建我的第一个测试框架。
测试网站:https://www.phptravels.net/
测试用例:
我在页面对象类中使用了xpath,脚本只会在启动网页之前运行。它无法单击“登录”链接。
我试图包含一个隐式等待,假设页面加载所用的时间比平时长。即使这样,问题仍然存在。
你能帮我理解一下这个正确的xpath会起作用吗?
代码:
POM_HomePage.java
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);
}
}
}
答案 0 :(得分:0)
根据您提出的问题加载页面 点击MyAccount - >登录。因此,您应该在两个单独的 WebElements 上调用click()
方法。但是,POM_HomePage.java
只返回一个 WebElement @FindBy(xpath="//*[@id='li_myaccount']/ul/li[1]/a")
在POM_HomePage.java
中定义两个 WebElements 和两个关联的functions()
,如下所示:
MyAccount Link
@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()
和click()
,对于 WebElements ,如下所示:
@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();
}
}