当前位置: 首页 > 知识库问答 >
问题:

我如何以一种可以普遍应用的方式在Java中实现Web驱动程序/页面对象/页面工厂

公孙高轩
2023-03-14

以下是我对应用于Webdriver的PageObjects/Pagefactory的实现理解:

1. Create the following structure in eclipse

--> com.example.qa.pageobjects 
     --> LoginPage.java

Every class in this package has something like: 

@FindBy(how = How.NAME, using = "logonName")
    private WebElement logonNameField;

and the Methods, call Webelement, and call methods on them, like:

logonNameField.sendKeys("username");

Which are called from ScenrioTests.

     --> HomePage.java (i go there after i login)
     --> Page.java (abstract)

--> com.example.qa.setup
    --> Browser.java
    --> FirefoxBrowser.java (Code specific to FFox)
    --> ChromeBrowser.java (Code Specific to Chrome)

--> com.example.qa.test
    --> Scenario1234.java 
    --> Scenario2345.java 

这些Scenario Classes实例化PageObjects,并在其中调用方法,而Browser设置仅在每次测试运行时调用一次。

现在的问题是:

  1. 我应该像下面这样声明一个方法并调用Pagefactory吗

公共的 MyPage 方法() { 调用方法,如登录() 等返回页面工厂.initElements(驱动程序, MDNS登录页面.class); }

>

  • 或者,我应该从默认构造函数调用相同的页面工厂吗?

    我的理解/执行是否正确?

  • 共有1个答案

    阴英武
    2023-03-14

    我想我有点遵循你的第一方法。我将尝试通过举例说明我的实现来回答这个问题,但我不确定这对您的目的是否有用。我有一个baseTest类,装载了可以在我的测试类中使用的通用方法。(例如,实例化浏览器、打开登录页面等)

    abstract class TestBase {
    //somewhere
    protected static LoginPage goToLoginPage(){
       driver.get(loginPage);
        return  PageFactory.initElements(driver, LoginPage.class);
    } 
    
    protected static void startBrowser(Browser browser){}
       //implemntation
      }
    

    然后,在继承抽象类的测试类中,我以以下方式使用它

    @BeforeClass
    public static void setup(){
      //use a common method to start browser    
      startBrowser(Browser.FIREFOX);
        }
    
    @Test
    public void canLogInToHomePage(){
    //start my test like this
    LoginPage loginPage =goToLoginPage();
    
    }
    
     类似资料:
    • 我的目标是:我需要构建一个自动化工具,它使用页面对象模型来自动化web应用程序。 页面对象模型与特定的web应用程序紧密耦合。如果您正在自动化一个特定的Web应用程序,则需要为该应用程序定义页面对象库并相应地运行测试。 现在,我能以某种方式设计和开发页面对象模型,使其自动化多个Web应用程序吗? 谢谢

    • 问题内容: 我想创建一个安全的登录/注销机制。我开始阅读以下文章,以了解要考虑的事项: 正确,优雅地解决注销问题 再谈注销问题 这些文章提出了一些好处,但是我正在考虑使用与Yahoo邮件登录页面类似的方式使用HTTPS。您知道…键入http://mail.yahoo.com,然后将您重定向到HTTPS页面,例如** https://**login.yahoo.com/config/login,在其

    • 在Selenium PageObjects中,我没有实例化任何web驱动程序实例,也没有如下所示进行编码 我试图在Selenium Page对象函数中实现以下代码。 有谁能建议我,在使用页面对象模型时,如何在上述代码中使用webdriver实例?

    • 问题内容: 使用jQuery,我想禁用主体的滚动: 我的想法是: 组 捕获当前 绑定到正文滚动事件,将scrollTop / scrollLeft设置为捕获的值。 有没有更好的办法? 更新: 我知道有人会在想“为什么他不只是在面板上使用?”。 请不要提出这个建议,因为我还有其他原因。 问题答案: 我发现执行此操作的唯一方法与您所描述的类似: 抓住当前滚动位置(不要忘记水平轴!)。 将溢出设置为隐藏

    • 我们可以使用页面对象执行滚动吗? 实际上,我需要根据元素滚动网页(向上/向下)。如何使用页面对象执行。 我使用Selenium web drive来启动浏览器,并使用Page对象来自动化web页面。 有什么建议吗???

    • 问题内容: 因此,我有一个应用程序(facebook应用程序实体),并且有一个页面。我想通过Java代码(通过restfb或任何其他建议)使用该应用发布到页面。似乎我错过了页面授予应用程序发布权限的阶段。不知道该怎么做。谢谢你们。友利 问题答案: 您只能发布“作为页面”,而不能发布“作为应用”。您需要页面访问令牌,并且需要使用/ page-id / feed端点进行发布。链接与信息和示例代码: h