3
votes

Comment convertir WebElement en TestObject dans katalon studio?

J'ai WebElement que je dois convertir en Testobject dans katalon en utilisant un script groovy.

Par exemple

List<WebElement> WEs = WebUI.executeJavaScript("return document.querySelector('#email').parentElement", [])

Maintenant, je veux convertir WE [0] en TestObject ce que Katalon accepte.

S'il vous plaît laissez-moi savoir si vous avez une idée à ce sujet.


0 commentaires

3 Réponses :


3
votes

Il n'y a pas de moyen direct de convertir les WebElements en TestObjects. Selon cette question du forum , vous pouvez créer une fonction pour obtenir le xpath de l'élément Web

WebUiCommonHelper.findWebElement(test-object, timeout)

puis créer un nouvel objet de test avec le xpath donné:

protected TestObject fromElement(RemoteWebElement element) {
    TestObject testObject = new TestObject();
    testObject.addProperty("xpath", ConditionType.EQUALS, getXPathFromElement(element));
    return testObject;
}


REMARQUE:

Pour une autre solution (Test Object -> WebElement), utilisez

protected String getXPathFromElement(RemoteWebElement element) {
    String elementDescription = element.toString();
    return elementDescription.substring(elementDescription.lastIndexOf("-> xpath: ") + 10, elementDescription.lastIndexOf("]"));
}


3 commentaires

Je pense que element.toString () ne renvoie pas xpath à chaque fois, j'ai essayé et je n'ai pas obtenu xpath. J'utilise le code suivant pour obtenir l'élément Web WebElement element = WebUI.executeJavaScript ("return document.querySelector ('. Text-center img')", []) String elementDescription = element.toString (); println (elementDescription.substring (elementDescription.last‌ IndexOf ("-> xpath:") + 10, elementDescription.lastIndexOf ("]"))) S'il vous plaît laissez-moi savoir si je me trompe.


L'élément dans votre exemple est sélectionné par un localisateur css. Avez-vous besoin d'utiliser WebUI.executeJavaScript () pour sélectionner l'élément? C'est plus simple en utilisant css ou xpath.


Oui, parfois, j'ai besoin d'obtenir des éléments en utilisant WebUI.executeJavaScript (), puis je dois convertir ces éléments en TestObject.



1
votes

Pour créer un objet de test à partir de n'importe quel élément Web, j'ai développé la fonction ci-dessous

public static TestObject getTestObjectFromWebElement(WebElement element) {
    TestObject object = new TestObject()
    object.addProperty("xpath", ConditionType.CONTAINS, functions.WebElementXPath(element))
    return object
}

Et puis j'ai créé une fonction pour obtenir un objet de test comme ci-dessous, comme suggéré par Mate MrÅ¡e p>

public static String WebElementXPath(WebElement element) {
    if (element.tagName.toUpperCase() == 'HTML')    return '/html';
    if (element.tagName.toUpperCase() == 'BODY')      return '/html/body';


    // calculate position among siblings
    int position = 0;
    // Gets all siblings of that element.
    List<WebElement> siblings = WebUI.executeJavaScript("return arguments[0].parentNode.childNodes", [element])
    WebElement innerSibs
    //List<WebElement> siblings = element.parentNode.childNodes;

    WebElement sibling
    def type,response
    for(int i=0;i<siblings.size();i++){
        type = WebUI.executeJavaScript("return arguments[0].nodeType", [siblings[i]])
        if (type == null){
            continue;
        }
        if(type!=1){
            continue;
        }
        sibling = siblings[i];
        // Check Siblink with our element if match then recursively call for its parent element.
        if (sibling == element) {
            innerSibs = WebUI.executeJavaScript("return arguments[0].parentElement", Arrays.asList(sibling))
            if(innerSibs==null){
                return ""
            }
            response = functions.WebElementXPath(innerSibs)
            return response+'/'+element.tagName+'['+(position+1)+']';

        }

        // if it is a siblink & element-node then only increments position.
        type = WebUI.executeJavaScript("return arguments[0].nodeType", [sibling])
        if (type == 1 && sibling.tagName == element.tagName)            position++;

    }
}

Remarque: le dossier "Framework" a été créé par nous comme dans le dossier Keyword et ensuite Nous avons créé le mot-clé "functions"

entrer l'image description here

J'espère que cela pourra aider d'autres développeurs.


0 commentaires

0
votes

WebUI.convertWebElementToTestObject ()


1 commentaires

Veuillez fournir plus de détails à votre réponse. Montrez des exemples si possible. Les réponses d'une seule ligne sans explication sont difficiles à comprendre.