gpt4 book ai didi

java - 使用页面对象模型(java)处理导航的最佳方法是什么

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:23 25 4
gpt4 key购买 nike

我对页面对象模式比较陌生。处理标题导航的最佳方法是什么?我不想每个部分都有多种方法或使用枚举来存储定位器。这种方法是否有意义,或者有更好的选择?

这是我使用 Serenity BDD 的代码:

标题导航页面

public class HeaderNavigation extends PageObject{

@FindBy(xpath = "")
private WebElementFacade categoryMenu;

@FindBy(xpath = "(//button[contains(@title,'Sign In')])[1]")
private WebElementFacade signInButton;

@FindBy(xpath = "")
private WebElementFacade timeslotButton;

public WebElementFacade getCategoryMenu() {
return categoryMenu;
}

public WebElementFacade getSignInButton() {
return signInButton;
}

public WebElementFacade gettimeslotButton() {
return timeslotButton;
}

public void ClickOnHeaderNavItem(WebElementFacade element){
boolean elementVisible = element.isVisible();
if (!elementVisible) {
element.withTimeoutOf(30, SECONDS).waitUntilVisible();
}
element.click();
}

}

登录步骤

public class LoginInSteps {

private HeaderNavigation headerNavigation;
private HomePage homePage;
private LoginPage loginPage;

@Step("The user is on login page")
public void OpenLoginPage() {
homePage.open();
headerNavigation.ClickOnHeaderNavItem(headerNavigation.getSignInButton());

}

最佳答案

我发现效果很好的做法是为任何类型的可重用元素创建一个类,例如导航栏,然后在使用它的每个页面的构造函数中创建它,或者更好 - 如果您为页面对象使用某种工厂,则注入(inject)它。

我有一些像这样方便的 C# selenium 代码,它应该能说明问题。

可重复使用的菜单栏(如标题导航):

public class MenuBar
{
private readonly IWebDriver _driver;

public MenuBar(IWebDriver driver)
{
_driver = driver;
PageFactory.InitElements(driver, this);
}

[FindsBy(How = How.XPath, Using = "(//button[contains(@title,'Sign In')])[1]")]
public IWebElement LogInButton { get; set; }

public LoginPage ClickLogin()
{
LogInButton.Click();

// Page object chaining, you could use a void return type instead
return new LoginPage(_driver);
}
}

主页构造函数:

public class HomePage
{
private readonly IWebDriver _driver;

public HomePage(IWebDriver driver)
{
_driver = driver;
MenuBar = new MenuBar(driver);
}

public MenuBar MenuBar { get; }
}

用于测试:

[Test]
public void TestLogin()
{
var homePage = new HomePage(Driver);

var loginPage = homePage.MenuBar.ClickLogin();

loginPage.Login("username", "password");

Assert.True(someCondition);
}

关于java - 使用页面对象模型(java)处理导航的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com