0
votes

Mon projet Java / sélénium donnait soudainement des erreurs, mais les éléments sont toujours là sur l'application Web. Quelqu'un sache comment résoudre ce problème?

Mon projet Java / sélénium donnait soudainement des erreurs, mais les éléments sont toujours là sur l'application Web. Donc, je reçois soudain des choses étranges. Tout fonctionne bien jusqu'au matin. J'ai exécuté ces tests comme 1000 fois auparavant et il n'y a pas eu rien changé sur le front-end dans le même temps.

Exemples d'erreurs:

org.openqa.selenium.webdriveception: erreur inconnue: non gérée Erreur d'inspecteur: {"Code": - 32000, "Message": "Impossible de trouver le contexte avec ID spécifié "}

ou

org.openqa.selenium.timeoutException: la condition attendue a échoué: En attente de la présence d'élément situé par: by.linktext: Betalingsregeling (essayé pendant 10 secondes avec 500 millisecondes intervalle)

ou

org.openqa.selenium.staleElementReferenceException: élément rassis Référence: l'élément n'est pas attaché au document de page (session Info: Chrome = 77.0.3865.90) ​​

ou

org.openqa.selenium.noschelementException: aucun élément de ce type: incapable de localiser l'élément: {"méthode": "CSS Sélecteur "," Sélecteur ":" Entrée [ID * = 'SearchCriteria [0]'] [Classe * = 'Col-SM-8'] "} (Info de session: Chrome = 77.0.3865.90) ​​


1 commentaires

Indiquer une attente explicite et voir si vous obtenez la même erreur?


3 Réponses :


0
votes

Vous devez juste utiliser une attente explicite ou implicite. L'élément est disponible à la page mais pas accessible par le sélénium, vous devez donc attendre qu'il soit disponible pour accéder.


10 commentaires

J'ai attendu partout dans mon code. Cela fonctionnait bien le dernier 1000X


Utilisez WHING.SLEEP ("3000") et si le problème est de l'attente, vous le saurez. Fondamentalement, de telles erreurs sont en raison de l'attente seulement.


Je doute que l'attente va le résoudre. J'ai rencontré la même erreur: "Impossible de trouver le contexte avec l'ID spécifié". Pour trouver n'importe quel élément, le code que nous avons construit des boucles tous les 100 ms pour essayer d'obtenir ou de cliquer sur un élément aussi longtemps que 60 secondes. Donc, c'est 600x réessayer à max. La page était juste chargée bien. Mais cette erreur a été montrée.


@Mikedeklerk il dit que tous ses éléments sont là sur la page, donc je pense que seule la raison de ne pas localiser la diffusion est que le pilote n'attend pas. Ou peut changer XPath ou CSS avec un autre nom d'attribut et valeur.


Nous avons traité une page qui a des cadres. Et pour pouvoir trouver des éléments, nous avons dû passer à l'un des cadres. À un moment donné pendant le test (pas toujours), le conducteur a déclaré qu'il était incapable de trouver un élément. Lors de l'inspection, il s'est avéré qu'il n'était plus dans le contexte de cette trame. EventHough Il n'y a aucun code qui navigue loin du cadre. Maintenant, lorsqu'une erreur comme celle-ci se produit, nous avons remis le code à nouveau sur le cadre (si possible) et réessayez. Il semblait avoir résolu nos problèmes.


Ok je vais essayer cela, en effet, j'ai lu des autres sujets que cela pourrait être à cause des cadres. Les tests de la demande im sont surchargés avec des cadres :(


Eh bien, j'ai échappé lors du débogage des endroits où il échoue normalement ... sa bonne chose ... La seule chose que je peux penser maintenant, c'est que les pages d'application se chargent rapidement et les attentes explicites.ExpecyConditions échouent parce que L'élément est trouvé mais le DOM n'est pas vraiment chargé. Est-ce une possibilité? Que puis-je faire à ce sujet?


@Yalcinbatur Dans ce cas, vous pouvez utiliser le thread.sleep () ou essayez de changer le XPath ou le CSS.


ive a changé toutes mes attentes dans le code de l'excpectiononition.presentionsentionfelement à l'élémentaireTobeclickable et donnant toujours les mêmes erreurs


Utilisez WHING.SLEEP (5000) pour tester si c'est un problème d'attente ou autre chose! Une fois que vous avez connu son attente, vous pouvez continuer à changer d'attente.



0
votes

On dirait que votre site Web a changé. Vérifiez les identifiants avec F12 en chrome sur le site Web que vous testez normalement et assurez-vous qu'ils sont toujours les mêmes.

alternativement; Vous pouvez vivre la typique "Ma candidature utilisait tout le week-end et il est maintenant lent le lundi matin" latence. Si tel est le cas, la réponse de Pratik est correcte, mais essayez d'augmenter le délai d'attente au lieu d'ajouter des couchages codés dur.

Mon seul autre devin, sur la base d'environ la moitié de ces erreurs, est que vous référencez accidentellement un webdiver plus ancien et n'utilisez pas celui que vous pensez que vous utilisez.


2 commentaires

J'ai vérifié les identifiants et liez les textes qu'ils sont toujours les mêmes. L'application est super rapide à la manière. Ne peut pas vraiment déclarer pourquoi cela se passe hmm


Commencer ChromeRiver 77.0.3865.10 (Info de session: Chrome = 77.0.3865.90)



0
votes

J'ai corrigé le problème avec un peu de threads.sleep après la commutation des iframes. Ne sais pas pourquoi l'attente explicite après la commutation des iframes et avant de trouver l'élément échoue, j'ai le délai d'attente sur 15 secondes et construit des attentes explicites avant chaque élément. Apparemment, les éléments à l'intérieur des cadres n'ont soudainement pas assez de temps pour charger complètement .....

 public static void switchToIFramesOfSearchPage() {
    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
    driver.switchTo().frame(SEARCH_PAGE_IFRAME1_ID_LOCATOR_VALUE);
    driver.switchTo().frame(SEARCH_PAGE_IFRAME2_ID_LOCATOR_VALUE);
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void switchToIFrameOfToolbar() {
    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
    driver.switchTo().frame(TOOLBAR_IFRAME_ID_LOCATOR_VALUE);
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void switchToIframeOfActivitiesPane(){
    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
    driver.switchTo().frame(ACTIVITIES_PANE_IFRAME_ID_LOCATOR_VALUE);
    try {
        Thread.sleep(750);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void switchToIFrameOfHistoryPane() {
    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
    driver.switchTo().frame(HISTORY_PANE_IFRAME_ID_LOCATOR_VALUE);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void switchToIFrameOfImportantView(){
    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
    driver.switchTo().frame(IMPORTANT_VIEW_IFRAME_ID_LOCATOR_VALUE);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void switchToIFrameOfAccountView(){
    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
    driver.switchTo().frame(ACCOUNT_VIEW_IFRAME_ID_LOCATOR_VALUE);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}


0 commentaires