org.openqa.le sélénium.NoSuchElementException: aucun élément
L'Exécution De Selenium WebDriver 2.37.1
Je reçois un problème intermittent lors de l'exécution d'un test et d'erreur suivant:
org.openqa.selenium.NoSuchElementException: no such element
Parfois, le test passe, la plupart du temps ce sera un échec. Ci-dessous est la stacktrace:
org.openqa.selenium.NoSuchElementException: no such element
(Session info: chrome=31.0.1650.57)
(Driver info:
chromedriver=2.6.232923,platform=Windows NT 6.1 SP1 x86_64)
(WARNING:
The server did not provide any stacktrace information)
Command duration or timeout: 10.04 seconds
For documentation on this error, please visit:
http://seleniumhq.org/exceptions/no_such_element.html
Build info:
version: '2.34.0', revision:
'11cd0ef93615408e0b6b3bfa28defe125906461a', time: '2013-08-06
11:43:14'
System info: os.name: 'Windows 7', os.arch: 'amd64',
os.version: '6.1', java.version: '1.7.0_45'
Session ID:
2375dca8adea8bb6962b0c87861cdd59
Driver info:
org.openqa.selenium.chrome.ChromeDriver
Capabilities
Et ci-dessous mon code pour exécuter le test:
@Test
public void loginPage(){
chrome.get("http://thisisafakeurl.com");
//entering username
WebElement usernameField = chrome.findElement(By.cssSelector("input[type='text'][id='usernameInput']"));
usernameField.sendKeys("fakeusername");
//entering password
WebElement passwordField = chrome.findElement(By.cssSelector("input[id='passwordInput']"));
passwordField.sendKeys("fakepassword");
//clicking submit button
chrome.findElement(By.cssSelector("input#loginBtn.rightButton")).click();
chrome.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//asserting a css selector. Not really needed. Just thrown in to learn.
//WebElement blankProjectLocator = chrome.findElement(By.cssSelector("li.iconGridItem[data-id='5']"));
//Assert.assertEquals("5", blankProjectLocator.getAttribute("data-id"));
//Clicking the Blank Project button
Actions actions = new Actions(chrome);
WebElement item1 = chrome.findElement(By.xpath("//*[@id=\"templateGrid\"]/li[2]/img[1]"));
WebElement item2 = chrome.findElement(By.xpath("//*[@id=\"templateGrid\"]/li[2]/img[2]"));
WebElement item3 = chrome.findElement(By.xpath("//*[@id=\"templateGrid\"]/li[2]/header/span"));
WebElement item4 = chrome.findElement(By.xpath("//*[@id=\"templateGrid\"]/li[2]"));
actions.moveToElement(item4)
.moveToElement(item1)
.moveToElement(item2)
.moveToElement(item3)
.click().build().perform();
chrome.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Dragging the Click Area component onto the canvas
WebElement listContainer = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div"));
WebElement componentList = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul"));
WebElement clickArea = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[1]"));
WebElement arrowHead = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[1]/div[1]"));
WebElement imageHolderClickArea = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[1]/div[1]/div"));
WebElement componentNameClickArea = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[1]/div[2]"));
WebElement canvas = chrome.findElement(By.xpath("//*[@id=\"page-c3\"]"));
actions.moveToElement(listContainer)
.moveToElement(componentList)
.clickAndHold(clickArea)
.moveToElement(arrowHead)
.moveToElement(imageHolderClickArea)
.moveToElement(componentNameClickArea)
.moveToElement(canvas)
.release().perform();
chrome.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//Dragging the close button onto the canvas
WebElement listContainerClose = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div"));
WebElement componentListClose = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul"));
WebElement closeButton = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[2]"));
WebElement componentThumb = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[2]/div[1]"));
WebElement imageHolderCloseButton = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[2]/div[1]/div"));
WebElement componentNameCloseButton = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[2]/div[2]"));
WebElement canvas1 = chrome.findElement(By.xpath("//*[@id=\"page-c3\"]"));
actions.clickAndHold(closeButton)
.moveToElement(listContainerClose)
.moveToElement(componentListClose)
.moveToElement(componentThumb)
.moveToElement(imageHolderCloseButton)
.moveToElement(componentNameCloseButton)
.moveToElement(canvas1)
.release().perform();
//WebElement xAxisClose = chrome.findElement(By.xpath("//*[@id=\"c358\"]"));
//xAxisClose.clear();
//xAxisClose.sendKeys("240");
//WebElement yAxisClose = chrome.findElement(By.xpath("//*[@id=\"c359\"]"));
//yAxisClose.clear();
//yAxisClose.sendKeys("5");
//Dragging the video component onto the canvas
WebElement listContainerVideo = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div"));
WebElement componentListVideo = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul"));
WebElement videoComponent = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[3]"));
WebElement componentThumbVideo = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[3]/div[1]"));
WebElement componentNameVideo = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[3]/div[2]"));
WebElement canvas2 = chrome.findElement(By.xpath("//*[@id=\"page-c3\"]"));
actions.clickAndHold(videoComponent)
.moveToElement(listContainerVideo)
.moveToElement(componentListVideo)
.moveToElement(componentThumbVideo)
.moveToElement(componentNameVideo)
.moveToElement(canvas2)
.release().perform();
chrome.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//Dragging the Text component onto the canvas
WebElement listContainerText = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div"));
WebElement componentListText = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul"));
WebElement textComponent = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[4]"));
WebElement componentThumbText = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[4]/div[1]"));
WebElement componentNameText = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div/ul/li[4]/div[2]"));
WebElement canvas3 = chrome.findElement(By.xpath("//*[@id=\"page-c3\"]"));
actions.clickAndHold(textComponent)
.moveToElement(listContainerText)
.moveToElement(componentListText)
.moveToElement(componentThumbText)
.moveToElement(componentNameText)
.moveToElement(canvas3)
.release().perform();
Le lien cliquable dans la stacktrace points me à la ligne de code suivante:
WebElement listContainer = chrome.findElement(By.xpath("//*[@id=\"componentsDiv\"]/div/div/div"));
Donc, avant que le test est capable de cliquez sur le Blank Project
bouton.
De mes enquêtes, il semble que je pourrais être confronté à des problèmes de synchronisation que c'est intermittente. Dois-je besoin de mettre un try/catch exception au lieu d'un délai d'attente? Ou suis-je en les plaçant au mauvais endroit dans mon code?
N'importe qui peut aider ou vous suggérer où j'ai peut-être tort?
OriginalL'auteur Django_Tester | 2013-11-18
Vous devez vous connecter pour publier un commentaire.
Je suppose que votre test échoue parfois à cause de la ci-dessous de tresorerie
Il suffit de placer le code d'expiration une fois dans ur begninning de le tester et de supprimer tous les autres cas.
OriginalL'auteur Yuvaraj HK
Comme Yuvaraj HK a mentionné ,à l'aide implicite attendre juste une fois dans votre code devrait être suffisant.Il l implicitement d'attente pour chaque élément que vous essayez de trouver dans votre code.
Mais essayez de garder implicite temps d'attente aussi bas que possible, car cela pourrait augmenter vos délais d'exécution du code..
Dans certains cas, l'élément peut prendre plus de 30 secondes pour être visible, Explicite attendre peut être utilisé dans ce genre de situations.
Je suggère fortement à l'aide de cssSelectors sur xpath. Cet article peut vous aider.
Même si xpath est utilisé, essayez d'utiliser plus courts. À l'aide d'un id n'est pas la seule façon de parvenir à un élément. Ses parents n'ont des noms de classe ou d'autres attributs que vous pouvez utiliser pour créer efficace
xpaths
oucssSelectors
.êtes-vous sûr d'utiliser le bon sélecteurs,pouvez-vous coller une partie de votre code html, et la trace de la pile ?
Voici le code HTML de l'élément déplaçable @Amith003 - La stacktrace est trop grand pour poster dans les commentaires. '<div class="listContainer"> <ul class="componentList j-componentList"> <li class="componentItem ui-déplaçable" data-id="c3"> <div class="componentThumb"> <div class="imageHolder"> <img src="myfakewebsite.com/fakeimage.png" draggable="false"> </div> </div> <div class="nomcomposant f-caractéristique-Une">Cliquez sur la zone</div> </li>'
vous pouvez toujours modifier votre question à coller le code....de toute façon, vous pouvez essayer ce cssSelector pour atteindre Cliquez sur la zone .....
li.ui-draggable > div.f-feature-A
OriginalL'auteur Amith
Droit... donc j'ai réussi à résoudre ce qui se passait ici. Comme je suis à l'aide de l'Ide, il me semble nécessaire de préciser pour chaque appel de méthode. Donc, en ajoutant
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
et de les placer 'a' sur ma première méthode, puis 'b' sur mon deuxième méthode (j'ai divisé le code que j'ai collé dans la question sur les méthodes depuis) et ainsi de suite, il a couru les méthodes dans l'ordre avec une attente sur chaque méthode:try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
OriginalL'auteur Django_Tester
J'ai eu ce même problème lorsque vous essayez de tester IE7 sur Windows Server 2003. Je fixe par retrait d'Internet Explorer Configuration de Sécurité Renforcée. Sur Server 2003, vous pouvez y remédier en procédant de la manière suivante:
Si à l'aide de Server 2008 ou 2012, les démarches seront différentes, mais le but est le même.
OriginalL'auteur James Watkins
avez-vous ouvrir une nouvelle fenêtre? Si oui, vous avez besoin de pilote pour passer à la nouvelle fenêtre, d'après le code est testé par moi:
OriginalL'auteur Timothy.Li
Essayez d'utiliser SeleniumWait bibliothèque:
OriginalL'auteur Łukasz Jasiński