0
votes

PROTRACTEUR NE PAS ALLER LA LIGNE PROCHAINE APRÈS CLIQUE DU DU PLASTIQUE

J'utilise du Protractor pour sélectionner l'élément de Dropdown. L'élément déroulant n'apparaîtra que lorsque vous cliquez sur le bouton déroulant.

En raison de l'identifiant Continuez à changer, j'utilise l'élément.Tous pour getText et utilisez si la condition de comparaison si la liste est identique à ma valeur, pour cliquer sur l'élément. P>

Failed: The element reference of <mat-option id="mat-option-575" class="mat-option ng-star-inserted"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed


0 commentaires

3 Réponses :


0
votes

Essayez la fonction ci-dessous.

async function Select(title){
    await browser.sleep(1000);
    await element(by.name("title")).click();
    await browser.sleep(1000);
    const ele = element.all(by.css('div>mat-option>span.mat-option-text'));
    for(i=0;i< ele.count();i++){
       if(await ele.get(i).getText() === title){
            await browser.sleep(1000);
             await ele.get(i).click();
             await browser.sleep(1000);
             break;
        }
     }
  }


4 commentaires

Salut. Merci pour la réponse. J'ai essayé votre solution mais cela semble ne pas trouver le titre d'attribut et ne saute que et passer à l'étape suivante.


@hafizan pouvez-vous me partager le code comment vous avez mis en œuvre la solution


Fonction SELECT (TITLE) {ELEMENT (NOM (NOM ("TITRE"))) Cliquez sur (). Ensuite (Fonction () {Browser.sleep (1000)}) Navigateur.sleep (1000); const ele = element.all (by.css ("div> option mat-option> span.mat-option-text ')); pour (i = 0; i


Je pense qu'il y a un problème avec une chaîne enchaînant. Essayez async / attendre . Regardez la réponse mise à jour



1
votes

On dirait que vous utilisez la boucle uniquement pour rechercher et cliquer sur la bonne option. Si tel est le cas, je ne pense pas qu'il n'y ait aucun besoin de boucle du tout. En fait, en boucle de cette façon, vous risquez de manquer une exception si le titre que vous attendez d'être il n'est pas présent car il ne clique pas simplement sur quoi que ce soit.

Si j'ai bien compris, vous pouvez essayer simplement de localiser l'élément et En cliquant dessus, mais si j'ai manqué une certaine contrainte, faites-le moi savoir. P>

function Select(title) {

    element(by.name("title")).click().then(function () {
        browser.sleep(1000);
        element(by.xpath(`//mat-option[text()='${title}']`)).click()
            .then(function () {
                console.log(`Clicked option containing ${title}`);
            })
        //alternate locator to try
        // element(by.xpath(`//mat-option/span[text()='${title}']/parent::mat-option`))
    })
};


4 commentaires

Je pense que votre méthode pourrait fonctionner. Mais il ne trouve pas l'élément de XPath. Pouvez-vous vous conseiller sur la façon dont il devrait être écrit si vous utilisez le localisateur CSS? Je sais seulement comment placer le localisateur mais je ne sais pas comment mettre la vérification dans le localisateur de l'élément à comparer avec ma valeur.


J'ai essayé de le changer comme ceci, mais je ne trouve toujours pas la recherche de localisateur: élément (by.css ("option Mat-option = [texte () = '$ {title}']")). Cliquez sur ()


@hafizan, je devrai rechercher la syntaxe exacte pour CSS, mais dans l'intervalle, vous pouvez essayer élément (by.csscontanttext ('option de match', titre) .Click ()


@hafizan pas de problème. Sachez simplement que CSSContainingText Vérifie si le texte contient une chaîne par opposition à est une chaîne. Ce qui signifie que si vous avez deux options pour officier en chef et juste en chef à l'aide de contenant ("option mat '," chef ") trouvera celui-ci une de ces options vient en premier



0
votes

Cette solution fonctionne pour mon cas. Merci à @dublindev:)

function Select(title) {

    element(by.name("title")).click().then(function () {
        browser.sleep(1000);
        element(by.cssContainingText('mat-option',title)).click().then(function () {
                console.log("click title");
            })
    })
};


0 commentaires