Package com.canoo.webtest.steps.verify

Source Code of com.canoo.webtest.steps.verify.VerifyElement

// Copyright � 2002-2005 Canoo Engineering AG, Switzerland.
package com.canoo.webtest.steps.verify;

import com.canoo.webtest.engine.Context;
import com.canoo.webtest.engine.StepFailedException;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

import java.util.Iterator;
import java.util.List;

/**
* @author unknown
* @author Marc Guillemot
* @webtest.step category="Core"
* name="verifyElement"
* alias="verifyelement"
* description="This step verifies the existence of a particular <key>HTML</key> element (tag) in the result page. It is identified by its <key>HTML</key> element type (e.g. TITLE, HEAD, etc.) and the <em>text</em> value of the NAME attribute."
*/
public class VerifyElement extends AbstractVerifyTextStep {
    private String fType;

    public String getType() {
        return fType;
    }

    /**
     * @webtest.parameter required="yes"
     * description="The <key>HTML</key> element type, e.g. "INPUT" for a <INPUT.../>  tag or "title" for <title>...</title>."
     */
    public void setType(final String newType) {
        fType = newType;
    }

    public void doExecute() {
        int numberOfHits = getNumberOfHits();

        if (numberOfHits > 1) {
            throw new StepFailedException("More than 1 element with type \""
                    + fType + "\" and name \"" + getText() + "\" found!", this);
        }
        if (numberOfHits == 0) {
            throw new StepFailedException("No element of type \"" + fType
                    + "\" and name \"" + getText() + "\" found!", this);
        }
    }

    /**
     * Gets the number of hits in the current response.
     * @deprecated Use {@link #getNumberOfHits()}.
     * @param context The execution context.
     * @return The number of hits.
     */
    protected int getNumberOfHits(final Context context) {
        return getNumberOfHits();
    }

    protected int getNumberOfHits() {
        Context context = getContext();
        int numberOfHits = findElementAttributeValue(context, getType(), ELEMENT_ATTRIBUTE_NAME, getText());

        if (numberOfHits == 0) {
            numberOfHits = findElementAttributeValue(context, getType(), ELEMENT_ATTRIBUTE_ID, getText());
        }
        return numberOfHits;
    }

    protected void verifyParameters() {
        super.verifyParameters();
        nullParamCheck(getType(), "type");
    }

    private int findElementAttributeValue(final Context context, final String elementType, final String attributeName, String value) {
        final List li = getAllElementsOfType(context, elementType.toLowerCase());
        return getNumberOfOccurances(li, value, attributeName);
    }

    /**
     * Gets all elements of the given type from the current html response
     *
     * @param context
     * @param type
     * @return a list of {@link com.gargoylesoftware.htmlunit.html.HtmlElement}
     */
    protected static List getAllElementsOfType(final Context context, final String type) {
        return ((HtmlPage) context.getCurrentResponse()).getDocumentElement().getHtmlElementsByTagName(type);
    }

    /**
     * Gets the number of elements having the value of the specified attribute matching the test
     * @param li
     * @param expectedString
     * @param attributeName
     */
    protected int getNumberOfOccurances(final List li, final String expectedString, final String attributeName) {
        int numberOfHits = 0;
        for (Iterator iter = li.iterator(); iter.hasNext();) {
            HtmlElement elt = (HtmlElement) iter.next();
            if (verifyStrings(expectedString, elt.getAttribute(attributeName))) {
                ++numberOfHits;
            }
        }
        return numberOfHits;
  }
}
TOP

Related Classes of com.canoo.webtest.steps.verify.VerifyElement

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.