2016-08-12 4 views
0

zu finden Ich arbeite an Baumansicht Art der Ordnerstruktur. Bitte Code unten finden:Nicht in der Lage, Element mit Xpath/Css-Locator in Selen

Code:

package Selenium_Practice; 

import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 

public class Folder_Navigation { 

    public static void main(String[] args) { 

     System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\Selenium_Practice\\EXEs\\geckodriver-v0.10.0-win64\\geckodriver.exe"); 

     WebDriver driver = new FirefoxDriver(); 

     driver.get("http://alfrescocontint:8080/alfresco"); 

     driver.manage().window().maximize(); 

     WebDriverWait wait = new WebDriverWait(driver,30); 

     wait.until(ExpectedConditions.elementToBeClickable(By.id("loginForm:submit"))); 

     driver.findElement(By.id("loginForm:user-name")).clear(); 
     driver.findElement(By.id("loginForm:user-name")).sendKeys("admin"); 

     driver.findElement(By.id("loginForm:user-password")).clear(); 
     driver.findElement(By.id("loginForm:user-password")).sendKeys("admin"); 

     driver.findElement(By.id("loginForm:submit")).click(); 

     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

     driver.findElement(By.xpath("//div[@id='navigator']/div[2]/a")).click(); 

     driver.findElement(By.cssSelector("img[id='ygtvt26']")).click(); 

     driver.findElement(By.cssSelector("img[id='ygtvt30']")).click(); 

     driver.findElement(By.cssSelector("img[id='ygtvt32']")).click(); 

     driver.findElement(By.cssSelector("img[id='ygtvt33']")).click(); 

     driver.findElement(By.xpath("//*[@id='ygtvcontentel38']/span")).click(); 
    } 

} 

-Code-Schnipsel:

<div id="ygtv32" class="ygtvitem"> 
<div class="treeNode" style="margin-left: 14px;"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tbody> 
<tr> 
<td> 
<img id="ygtvt32" class="ygtvtp" src="/alfresco/images/icons/arrow_open.gif" onclick="javascript:YAHOO.widget.TreeView.getNode('treeContainer',32).toggle()"/> 
</td> 
<td onclick="treeNodeSelected("workspace://SpacesStore/20fdf23c-50ed-4e8f-9af8-262c35c80dde");"> 
<td id="ygtvcontentel32" onclick="treeNodeSelected("workspace://SpacesStore/20fdf23c-50ed-4e8f-9af8-262c35c80dde");"> 
</tr> 
</tbody> 
</table> 
</div> 
<div id="ygtvc32" class="ygtvchildren" style=""> 
</div> 

Fehler:

1470997671795 Marionette: Element is missing an accesible name -> id: loginForm:user-name, tagName: INPUT, className: 
1470997671848 Marionette: Element does not have a correct accessibility role and may not be manipulated via the accessibility API -> id: loginForm:user- password, tagName: INPUT, className: 
JavaScript warning: https://normandy.cdn.mozilla.net/static/bundles/selfrepair-72948156b77d6ce320e0.1e946d807ad4.js, line 11001: mutating the [[Prototype]] of an object will cause your code to run very slowly; instead create the object with the correct initial [[Prototype]] value using Object.create 
1470997678274 Marionette: Element does not have a correct accessibility role and may not be manipulated via the accessibility API -> id: ygtvt26, tagName: IMG,  className: ygtvtn 
1470997678426 Marionette: Element does not have a correct accessibility role and may not be manipulated via the accessibility API -> id: ygtvt30, tagName: IMG,  className: ygtvtp 
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: img[id='ygtvt32'] (WARNING: The server did not provide any  stacktrace information) 
Command duration or timeout: 30.08 seconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: 'unknown', revision: '2aa21c1', time: '2016-08-02 14:59:43 -0700' 
System info: host: 'LON-EKNATHDVM', ip: '10.63.23.191', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{rotatable=false, raisesAccessibilityExceptions=false, appBuildId=20160407164938, version=, platform=XP, proxy={}, specificationLevel=1, acceptSslCerts=false, browserVersion=45.0.2, platformVersion=6.1, XULappId={ec8030f7-c20a-464f-9b0e-13a3a9e97384}, browserName=Firefox, takesScreenshot=true, takesElementScreenshot=true, platformName=Windows_NT, device=desktop}] 
Session ID: 70dd0528-45e4-4492-b607-695f45ab0d3a 
*** Element info: {Using=css selector, value=img[id='ygtvt32']} 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:683) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:377) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:498) 
    at org.openqa.selenium.By$ByCssSelector.findElement(By.java:430) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:369) 
    at Selenium_Practice.Folder_Navigation.main(Folder_Navigation.java:45) 

img id ändert sich ständig, das Skript macht scheitern. Beachten Sie, dass diese Ordner dynamisch erstellt werden, da in einer anderen Anwendung Daten erstellt werden.

Bitte stellen Sie eine Technik zur Verfügung, um das Element während jeder Iteration erfolgreich zu identifizieren.

+0

Können Sie ein größeres Code-Snippet hinzufügen? Einschließlich der Teil der Kinder. Ist das Klassenattribut des img-Tags für die Seite eindeutig, dh nirgendwo anders verwendet? Dann können Sie versuchen, das als Locator zu verwenden. Oder sonst müssen Sie xpath oder css Route gehen – Grasshopper

Antwort

0

Es sieht aus wie Sie auf alle „Baumknoten“ auf der Seite zu klicken versuchen, so könnten Sie so etwas wie dies versuchen, wo Sie alle Knoten durch ihre Ur-Großeltern div finden:

List<WebElement> ygtvitems = enhancePreviewPage.getDriver().findElements(new By.ByCssSelector("div.ygtvitem")); 
    for (WebElement treeNode : ygtvitems) { 
     treeNode.click(); 
    } 
Verwandte Themen