0

現在、自動テスト ソリューションの実装に取り​​組んでいます。私は htmlelements を選択することにしましたが、この実装では、クリーンな webdriver+pagefactory を使用してコーディングし、htmlelements の利点を確認しています。私はコーディングがあまり得意ではなく、ほとんど最初から行き詰まってしまいました。http://htmlelements.qatools.ru/の導入部で実装された Java クラスを作成しました。

これが私のコードです:

pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>w4w</groupId>
    <artifactId>w4w</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.48.2</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.1.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>ru.yandex.qatools.htmlelements</groupId>
            <artifactId>htmlelements-java</artifactId>
            <version>1.15</version>
        </dependency>
        <dependency>
            <groupId>ru.yandex.qatools.ashot</groupId>
            <artifactId>ashot</artifactId>
            <version>1.4.12</version>
        </dependency>
    </dependencies>

</project>

LoginForm.java (要素)

    package htmlelements.Elements; /**
 * Created by Asus on 06.12.2015.
 */


import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import ru.yandex.qatools.htmlelements.annotations.Name;
import ru.yandex.qatools.htmlelements.element.Button;
import ru.yandex.qatools.htmlelements.element.HtmlElement;
import ru.yandex.qatools.htmlelements.element.TextInput;


@Name("Login Form")
public class LoginForm extends HtmlElement {

    @Name("Username textbox")
    @FindBy(id = "i_user")
    private TextInput UserNameTextbox;

    @Name("Password textbox")
    @FindBy(id = "i_password")
    private TextInput PasswordTextbox;

    @Name("Login button")
    @FindBy(xpath = "//*[@Value='Login']")
    private Button LoginButton;

    public void Login(String userName, String password){
         UserNameTextbox.sendKeys(userName);
         PasswordTextbox.sendKeys(password);
         LoginButton.click();
    }
}

LoginPage(PageObject):

package htmlelements.PageObjects;

import htmlelements.Elements.LoginForm;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import ru.yandex.qatools.htmlelements.annotations.Name;
import org.openqa.selenium.WebDriver;
import ru.yandex.qatools.htmlelements.element.TextInput;
import ru.yandex.qatools.htmlelements.loader.HtmlElementLoader;


/**
 * Created by Asus on 06.12.2015.
 */

@Name("Login Page")
public class LoginPage {
    private LoginForm loginForm;

    public LoginPage(WebDriver driver){
        HtmlElementLoader.populatePageObject(this, driver);
    }

    @FindBy(id = "i_user")
    public TextInput usernm;

    public void Login(String userName, String password){
        loginForm.Login(userName, password);
    }
}

MSWhtml 要素 (テスト):

/**
 * Created by Asus on 05.12.2015.
 */

import htmlelements.PageObjects.LoginPage;
import htmlelements.PageObjects.MainMenuPage;
import htmlelements.PageObjects.MerchantServiceWorkbenchScreen;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;

public class MSWhtmlelements {
    private WebDriver driver;

    @BeforeSuite
    public void initDriver() throws Exception {
        System.out.println("You are testing in firefox");
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
    }

    @Test
    public void trainingTest(){
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        LoginPage loginPage = new LoginPage(driver);
        MainMenuPage mainMenuPage = new MainMenuPage(driver);
        MerchantServiceWorkbenchScreen mswScreen = new MerchantServiceWorkbenchScreen(driver);

        String baseLink = "http://w4w-auto:41600/";
        driver.get(baseLink);


        loginPage.usernm.sendKeys("123123");

        loginPage.Login("epichugin", "epichugin");

        mainMenuPage.GoTo();
    }

    @AfterSuite
    public void quitDriver() throws Exception {
        driver.quit();
    }
}

したがって、ご覧のとおり、アクションを 2 回呼び出そうとしました: loginPage.usernm.sendKeys("123123"); - 正常に動作する loginPage.Login("epichugin", "epichugin"); - まったく機能しません。例外もありません。

webdriver+pageobjects の場合、非常に安定して動作します。これが機能する私のpageobjectクラスです。これに対するテストはほとんど同じです:

/**
 * Created by Asus on 04.12.2015.
 */

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;


public class PageElements {
    @FindBy(id = "i_user")
    private WebElement UsernameTextbox;

    @FindBy(id = "i_password")
    private WebElement PasswordTextbox;

    @FindBy(xpath = "//*[@Value='Login']")
    private WebElement LoginButton;

    public PageElements (WebDriver driver){
        PageFactory.initElements(driver, this);
    }

    public void login (String username, String password){
        UsernameTextbox.sendKeys(username);
        PasswordTextbox.sendKeys(password);
        LoginButton.click();
    }
}

前もって感謝します!

4

1 に答える 1

0

@FindByLoginForm クラスに注釈がありません。セレンがログインフォームをどのように見つけると思いますか?

于 2015-12-07T15:14:01.503 に答える