如何使用 selenium 和 java 将应用程序的所有页面类(如页眉、页脚)添加到页面对象模型中?

Ach*_*ver 5 java selenium header footer pom.xml

我正在尝试使用 Selenium 和 JAVA 自动化 Web 测试,

我有一个 Web 应用程序,其中某些部分(例如页眉和页脚)在多个页面上重复。我正在使用页面对象模型,为每个网页创建页面类文件。所有网页都有相同的页眉和页脚。

我创建了两个页面类文件 HomePage.java 和 SmallBusinessPage.java 以及组件页眉和页脚的两个单独的类文件 Header.java 和 Footer.java。这些文件与页面类文件位于单独的包中。我的测试类文件是TestCaseDevelopment.java,基类是TestBase.java。我需要使用 HomePage 对象从测试类 TestCaseDevelopment.java 访问标头链接“enroll”(其定位器位于 Header.java 文件中)。(HomePage 包含 HeaderHomePage 定位器,它可以在网页上查找整个标题。Header.java 文件中的 LinkEnroll 定位器在标题中定位链接。因此链接的完整定位器是 HeaderHomePage+LinkEnroll,这意味着//header//div[@id='masthead']//a[normalize-space()='Enroll']我无法访问它。

我不想在每个页面类文件中为页眉和页脚创建重复项。如何将这些部分定义为单独的类文件并将它们包含到我的页面类文件中?

主页.java

public class HomePage extends TestBase {

    @FindBy(xpath = "//header//div[@id='masthead']")
    public Header HeaderHomePage;

    public HomePage() {
        PageFactory.initElements(driver, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

小型企业页面.java

public class SmallBusinessPage extends TestBase{

    @FindBy(xpath = "//header//div[@id='masthead']")
    public Header HeaderSmallBusiness;

    public SmallBusinessPage() {
        PageFactory.initElements(driver, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

标头

public class Header extends TestBase{

    @FindBy(xpath="//a[normalize-space()='Enroll']")
    WebElement LinkEnroll;

    public Header() {
        PageFactory.initElements(driver, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

页脚

public class Footer extends TestBase {

    @FindBy(xpath="//footer//a[text()='Careers']")
    public WebElement LinkCareers;

    public Footer() {
        PageFactory.initElements(driver, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

测试库

public class TestBase {

    public static WebDriver driver;
    public static Properties prop;
    Header header = new Header();

    public TestBase(){

        try {
            prop = new Properties();
            FileInputStream istream = new FileInputStream("C:\\QA -Selenium\\WS\\WellsFargoTest\\src\\main\\java\\com\\wellsfargo\\qa\\config\\config.properties");
            prop.load(istream);
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    public static void initialization() {
        String browserName = prop.getProperty("browser");
        if(browserName.equals("chrome")){
            System.setProperty("webdriver.chrome.driver","C:\\Selenium\\chromedriver");
            driver =new ChromeDriver();
        }
        if(browserName.equals("FF")){
            System.setProperty("webdriver.gecko.driver","C:\\Selenium\\geckodriver");
            driver = new FirefoxDriver();
        }
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(TestUtility.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);        
        driver.manage().timeouts().implicitlyWait(TestUtility.IMLICIT_WAIT, TimeUnit.SECONDS);  
        driver.get(prop.getProperty("url"));
    }
}
Run Code Online (Sandbox Code Playgroud)

测试用例开发

public class TestCaseDevelopment extends TestBase{

    HomePage homePage;
    public TestCaseDevelopment() {
        super();
    }

    @BeforeMethod
    public void setup() {
        initialization();
        homePage = new HomePage();
        ****homePage.HeaderHomePage.l****
    }
}
Run Code Online (Sandbox Code Playgroud)

Muz*_*mil 0

根据标准实践,您必须创建一个名为的类,BaesPage.java该类保留应用程序中的所有常见定位器。所有页面对象都将扩展此类,因此所有公共定位器将可用于所有页面对象。请看一看。

\n\n

基本页.java

\n\n
public class BasePage{\n\n    @FindBy(xpath="//a[normalize-space()=\'Enroll\']")\n    WebElement LinkEnroll;\n\n\n@FindBy(xpath="//footer//a[text()=\'Careers\']")\n    public WebElement LinkCareers;\n\n    public BasePage() {\n        PageFactory.initElements(driver, this);\n    }\npublic void clickEnroll()\n{\n\nLinkEnroll.click();\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

现在您\xe2\x80\x99不需要 Header.java 和 Footer.java 两个单独的类,因为\n 两者在应用程序中都有通用的定位器,因此它被移入\n BasePage.java

\n
\n\n

主页.java

\n\n
public class HomePage extends BasePage {\n\n    @FindBy(xpath = "//header//div[@id=\'masthead\']")\n    public Header HeaderHomePage;\n\n    public HomePage() {\n        PageFactory.initElements(driver, this);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试库.java

\n\n
public class TestBase {\n\n    public static WebDriver driver;\n    public static Properties prop;\n    Header header = new Header();\n\n    public TestBase(){\n\n        try {\n            prop = new Properties();\n            FileInputStream istream = new FileInputStream("C:\\\\QA -Selenium\\\\WS\\\\WellsFargoTest\\\\src\\\\main\\\\java\\\\com\\\\wellsfargo\\\\qa\\\\config\\\\config.properties");\n            prop.load(istream);\n        }\n        catch(FileNotFoundException e) {\n            e.printStackTrace();\n        }\n        catch(IOException e)\n        {\n            e.printStackTrace();\n        }\n    }\n\n    public static void initialization() {\n        String browserName = prop.getProperty("browser");\n        if(browserName.equals("chrome")){\n            System.setProperty("webdriver.chrome.driver","C:\\\\Selenium\\\\chromedriver");\n            driver =new ChromeDriver();\n        }\n        if(browserName.equals("FF")){\n            System.setProperty("webdriver.gecko.driver","C:\\\\Selenium\\\\geckodriver");\n            driver = new FirefoxDriver();\n        }\n        driver.manage().window().maximize();\n        driver.manage().deleteAllCookies();\n        driver.manage().timeouts().pageLoadTimeout(TestUtility.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);        \n        driver.manage().timeouts().implicitlyWait(TestUtility.IMLICIT_WAIT, TimeUnit.SECONDS);  \n        driver.get(prop.getProperty("url"));\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试用例开发

\n\n
public class TestCaseDevelopment extends TestBase{\n\n    HomePage homePage;\n    public TestCaseDevelopment() {\n        super();\n    }\n\n    @BeforeMethod\n    public void setup() {\n        initialization();\n        homePage = new HomePage();\n//Now you can call clickEnroll from any page object\n        homePage.clickEnroll();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n