Class HybridStateVertexImpl
- java.lang.Object
-
- com.crawljax.core.state.StateVertexImpl
-
- com.crawljax.stateabstractions.hybrid.HybridStateVertexImpl
-
- All Implemented Interfaces:
StateVertex,Serializable
public class HybridStateVertexImpl extends StateVertexImpl
The state vertex class which represents a state in the browser. When iterating over the possible candidate elements every time a candidate is returned its removed from the list so it is a one time only access to the candidates.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static booleanFAST_COMPAREprivate booleanfragmentedprivate DocumentfragmentedDomprivate HashMap<Integer,Fragment>fragmentMapprivate ArrayList<Fragment>fragmentsprivate BufferedImageimageprivate FragmentrootFragmentprivate static longserialVersionUIDprivate intsizeprivate doublethresholdprivate booleanvisualData-
Fields inherited from class com.crawljax.core.state.StateVertexImpl
LOG
-
Fields inherited from interface com.crawljax.core.state.StateVertex
INDEX_ID
-
-
Constructor Summary
Constructors Constructor Description HybridStateVertexImpl(int id, String url, String name, String dom, String strippedDom, double threshold, boolean visualData)Defines a State.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddCandidatesToFragments()private voidaddFragment(Fragment fragment)voidaddFragments(List<VipsRectangle> rectangles, org.openqa.selenium.WebDriver driver)List<Fragment>assignDynamicFragments(StateVertex ndState)Use nearduplicate state to find dynamic fragments.static doublecomputeDistance(Document doc1, Document doc2, boolean visualData)static doublecomputeDistance_Oracle(Document doc1, Document doc2, boolean visualData)static booleancomputeDistanceUsingChangedNodes(Document doc1, Document doc2, boolean visualData)private FragmentcreateDomFragment(Node fragmentParentNode, List<Node> nestedBlocks, Fragment parent, org.openqa.selenium.WebDriver driver)booleanequals(Object object)voidexportFragments(File screenshotsFolder, BufferedImage pageViewport)DocumentfragmentDom(EmbeddedBrowser browser, BufferedImage screenshot, File screenshotFile)voidgenerateDomFragments(HashMap<Integer,Fragment> fragmentMap, org.openqa.selenium.WebDriver driver)static List<List<Node>>getChangedNodes(Document doc1, Document doc2, boolean visualData)FragmentgetClosestDomFragment(CandidateElement element)FragmentgetClosestDomFragment(Node node)FragmentgetClosestFragment(CandidateElement element)getClosestFragment(org.w3c.dom.Node)gets closest fragment for the node for which the candidate element is createdFragmentgetClosestFragment(Node node)Uses DOM hierarchy to determine the smallest fragment (still "useful") in the fragment hierarchy that contains the nodeprivate FragmentgetClosestFragment(Node node, Fragment root)private List<Node>getContainedNodes(Node node, List<Node> nestedBlocks)List<List<Node>>getDifference(StateVertex other)static List<Node>getDiffNodes(Document doc1, Document doc2, boolean visualData)Returns nodes of doc1 which are mapped to doc2 but have different tag or text valuedoublegetDist(StateVertex vertexOfGraph)DocumentgetDocument()private List<Fragment>getDomFragments(Node rootNode, List<Node> nestedBlocks, HashMap<Integer,Fragment> fragmentMap, Fragment parent, org.openqa.selenium.WebDriver driver)VIPS uses a 2-Dim view of the page to draw horizontal and vertical separators that create content-rectangles Sometimes, this method does not yield the best fragments.private FragmentgetFragment(int fragParent)ArrayList<Fragment>getFragments()BufferedImagegetImage()intgetNextFragmentId()FragmentgetRootFragment()private List<Node>getSiblingLca(List<Fragment> fragments, Fragment exclude)private intgetSize()inthashCode()NodehighestDifferentiator(Fragment fragment, List<Fragment> siblings)private booleanisADifferentiator(List<Node> siblingLcas, Node lca)booleanisFragmented()booleanisVisualData()private NodeleastCommonAncestor(List<Fragment> fragments, Fragment exclude)DocumentloadFragmentDom(Document dom, BufferedImage screenshot)private static voidpopulatePostorder(List<Node> postorderList, Node node)voidsetDocument(Document dom)voidsetElementsFound(LinkedList<CandidateElement> elements)private voidsetFragmentHdn()HDN or highest differentiating node is the DOM node closest to the DOM root (body) that contains all Vips-blocks in the fragment butvoidsetFragments(ArrayList<Fragment> fragments)voidsetImage(BufferedImage image)private voidsetParentNode(Fragment fragment)voidsetVisualData(boolean visualData)StringtoString()-
Methods inherited from class com.crawljax.core.state.StateVertexImpl
getCandidateElement, getCandidateElement, getCandidateElements, getCluster, getDistToNearestState, getDom, getId, getName, getNearestState, getSerialversionuid, getStrippedDom, getUrl, hasNearDuplicate, hasUnexploredActions, inThreshold, isNearDuplicate, isOnURL, setCluster, setDirectAccess, setDistToNearestState, setHasNearDuplicate, setNearestState, setOnURL
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
FAST_COMPARE
public static final boolean FAST_COMPARE
- See Also:
- Constant Field Values
-
rootFragment
private transient Fragment rootFragment
-
threshold
private double threshold
-
fragmentedDom
private transient Document fragmentedDom
-
image
private transient BufferedImage image
-
fragmented
private boolean fragmented
-
visualData
private boolean visualData
-
size
private int size
-
-
Constructor Detail
-
HybridStateVertexImpl
public HybridStateVertexImpl(int id, String url, String name, String dom, String strippedDom, double threshold, boolean visualData)Defines a State.- Parameters:
id- id of the state in the SFGurl- the current url of the statename- the name of the statedom- the current DOM tree of the browserstrippedDom- the stripped dom by the OracleComparatorsthreshold- the threshold to be usedvisualData-
-
-
Method Detail
-
computeDistanceUsingChangedNodes
public static boolean computeDistanceUsingChangedNodes(Document doc1, Document doc2, boolean visualData)
-
computeDistance
public static double computeDistance(Document doc1, Document doc2, boolean visualData)
-
getChangedNodes
public static List<List<Node>> getChangedNodes(Document doc1, Document doc2, boolean visualData)
-
getDiffNodes
public static List<Node> getDiffNodes(Document doc1, Document doc2, boolean visualData)
Returns nodes of doc1 which are mapped to doc2 but have different tag or text value- Parameters:
doc1-doc2-visualData-- Returns:
-
computeDistance_Oracle
public static double computeDistance_Oracle(Document doc1, Document doc2, boolean visualData)
-
isVisualData
public boolean isVisualData()
-
setVisualData
public void setVisualData(boolean visualData)
-
isFragmented
public boolean isFragmented()
-
loadFragmentDom
public Document loadFragmentDom(Document dom, BufferedImage screenshot)
-
fragmentDom
public Document fragmentDom(EmbeddedBrowser browser, BufferedImage screenshot, File screenshotFile)
-
getDocument
public Document getDocument()
- Specified by:
getDocumentin interfaceStateVertex- Overrides:
getDocumentin classStateVertexImpl- Returns:
- a Document instance of the dom string.
-
setDocument
public void setDocument(Document dom)
- Specified by:
setDocumentin interfaceStateVertex- Overrides:
setDocumentin classStateVertexImpl
-
hashCode
public int hashCode()
- Overrides:
hashCodein classStateVertexImpl
-
getImage
public BufferedImage getImage()
-
setImage
public void setImage(BufferedImage image)
-
getDifference
public List<List<Node>> getDifference(StateVertex other)
-
assignDynamicFragments
public List<Fragment> assignDynamicFragments(StateVertex ndState)
Use nearduplicate state to find dynamic fragments. Can be used during state revisit as well.- Parameters:
ndState-- Returns:
-
getSize
private int getSize()
-
equals
public boolean equals(Object object)
- Overrides:
equalsin classStateVertexImpl
-
toString
public String toString()
- Overrides:
toStringin classStateVertexImpl
-
getDist
public double getDist(StateVertex vertexOfGraph)
- Specified by:
getDistin interfaceStateVertex- Overrides:
getDistin classStateVertexImpl
-
setElementsFound
public void setElementsFound(LinkedList<CandidateElement> elements)
- Specified by:
setElementsFoundin interfaceStateVertex- Overrides:
setElementsFoundin classStateVertexImpl- Parameters:
elements- Set the candidate elements for this state vertex that might be fired.
-
getFragments
public ArrayList<Fragment> getFragments()
- Specified by:
getFragmentsin interfaceStateVertex- Overrides:
getFragmentsin classStateVertexImpl
-
setFragments
public void setFragments(ArrayList<Fragment> fragments)
- Specified by:
setFragmentsin interfaceStateVertex- Overrides:
setFragmentsin classStateVertexImpl
-
addFragments
public void addFragments(List<VipsRectangle> rectangles, org.openqa.selenium.WebDriver driver)
- Specified by:
addFragmentsin interfaceStateVertex- Overrides:
addFragmentsin classStateVertexImpl
-
exportFragments
public void exportFragments(File screenshotsFolder, BufferedImage pageViewport)
-
getNextFragmentId
public int getNextFragmentId()
-
createDomFragment
private Fragment createDomFragment(Node fragmentParentNode, List<Node> nestedBlocks, Fragment parent, org.openqa.selenium.WebDriver driver)
-
setFragmentHdn
private void setFragmentHdn()
HDN or highest differentiating node is the DOM node closest to the DOM root (body) that contains all Vips-blocks in the fragment but
-
getDomFragments
private List<Fragment> getDomFragments(Node rootNode, List<Node> nestedBlocks, HashMap<Integer,Fragment> fragmentMap, Fragment parent, org.openqa.selenium.WebDriver driver)
VIPS uses a 2-Dim view of the page to draw horizontal and vertical separators that create content-rectangles Sometimes, this method does not yield the best fragments. For example, when there is an overlay element. DOM fragments use the detected VIPS-visual blocks (not fragments but just DOM elements that are considered important by VIPS) but use the DOM structure to divide these visual blocks.- Parameters:
rootNode-nestedBlocks-fragmentMap-parent-driver-- Returns:
-
generateDomFragments
public void generateDomFragments(HashMap<Integer,Fragment> fragmentMap, org.openqa.selenium.WebDriver driver)
- Parameters:
fragmentMap-driver-
-
highestDifferentiator
public Node highestDifferentiator(Fragment fragment, List<Fragment> siblings)
-
setParentNode
private void setParentNode(Fragment fragment)
-
addFragment
private void addFragment(Fragment fragment)
-
getRootFragment
public Fragment getRootFragment()
- Specified by:
getRootFragmentin interfaceStateVertex- Overrides:
getRootFragmentin classStateVertexImpl
-
getFragment
private Fragment getFragment(int fragParent)
-
getClosestFragment
public Fragment getClosestFragment(Node node)
Uses DOM hierarchy to determine the smallest fragment (still "useful") in the fragment hierarchy that contains the node- Specified by:
getClosestFragmentin interfaceStateVertex- Overrides:
getClosestFragmentin classStateVertexImpl- Parameters:
node-- Returns:
-
getClosestFragment
private Fragment getClosestFragment(Node node, Fragment root)
- Parameters:
node-root-- Returns:
-
getClosestDomFragment
public Fragment getClosestDomFragment(CandidateElement element)
- Specified by:
getClosestDomFragmentin interfaceStateVertex- Overrides:
getClosestDomFragmentin classStateVertexImpl
-
getClosestFragment
public Fragment getClosestFragment(CandidateElement element)
getClosestFragment(org.w3c.dom.Node)gets closest fragment for the node for which the candidate element is created- Specified by:
getClosestFragmentin interfaceStateVertex- Overrides:
getClosestFragmentin classStateVertexImpl- Parameters:
element-- Returns:
-
addCandidatesToFragments
protected void addCandidatesToFragments()
-
-