2017-07-02 4 views
0

Ich erstelle einen automatischen Test für einige Web und verwende WebDriver und Code, der in Java geschrieben ist. Ich habe hier zwei Probleme.Liste <WebElement> gibt leere Ergebnisse

  1. click() Methode funktioniert nicht.
  2. Wenn ich versuche, eine Liste von WebElement zu lesen, wird die Anzeige leer angezeigt. Aber es zeigt korrekt size().

Mein Code:

System.setProperty("webdriver.gecko.driver", "D:\\back up\\Proj\\selenium\\Jars\\Drivers\\geckodriver.exe"); 
WebDriver driver=new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
driver.get("http://www.americangolf.co.uk/golf-clubs/fairway-woods"); 

List<WebElement> allBrands = driver.findElements(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/ul/li/a")); 
List<WebElement> allBrandsInShowAll = driver.findElements(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/div[2]/ul/li/a")); 

System.out.println("Total No of Brands "+(allBrands.size() + allBrandsInShowAll.size())); 
driver.findElement(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/div[1]/a")).click(); // This is not clicking on ShowAll Button 
for(WebElement ele :allBrandsInShowAll) { 
    System.out.println("Name=>"+ele.getText()); 
} 

for(WebElement ele :allBrands) { 
System.out.println("Name=>"+ele.getText()); // Not printing the names of Brands 
} 
+0

Haben Sie XPath validieren, wo Sie versuchen, um Elemente zu bekommen? Es könnte möglich sein, dass Xpath falsch ist. –

+0

Was willst du hier in ** allBrandsInShowAll **? –

+0

Xpath ist korrekt. Ich habe es bestätigt. überprüfen Sie bitte diese URL "http://www.americangolf.co.uk/golf-clubs/fairway-woods" allBrandsInShowAll sollte die Werte halten, die nach [+ Show All] Knopf klicken. [li Werte sind unter verschiedenen div] – bbk

Antwort

0
  1. Sie können einfach den CSS-Selektor verwenden div.showall die ShowAll -Schaltfläche von den Marken-Optionen zu klicken.

    driver.findElement(By.cssSelector("div.showall")).click(); 
    

Oder auch diese XPath arbeitet direkt

driver.findElement(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/div[1]/a")).click() 
  1. Das übergeordnete Element, das Sie die getText() für immer nahm nicht korrekt ist

    List<WebElement> allBrands = driver.findElements(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/ul/li/a")); 
    

Damit werden alle a Tag-Elemente in einem einzigen Kind gespeichert. Sie müssen in alle li Childs gehen und ihren Ankertext erhalten.

Sie brauchen so etwas wie dieses

WebElement parentElement = driver.findElement(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/ul")); 

    List<WebElement> allBrands = parentElement.findElements(By.cssSelector("li >a")); 

    for(WebElement ele :allBrands) { 
    System.out.println("Name=>"+ele.getText()); 
    } 

die Ausgabe druckt als

Name => Cobra Golf (14)

Name => CallawayGolf (10)

Name => TaylorMade (8)


Edit: OP erwähnte er nicht in der Lage ist, die anderen Marken Optionen zu erhalten, sobald ShowAll Schaltfläche geklickt wird. Der Grund ist, dass sie in einem anderen Kind sind.

Sie bitte Ihre endgültige Code dazu ändern -

//clicks on ShowAll button 
    driver.findElement(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/div[1]/a")).click(); 
    Thread.sleep(5000); 

    //gets parent for Categories 
    WebElement parentElement = driver.findElement(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/ul")); 

    //gets parent for Categories shown after clicking ShowAll 
    WebElement secondParentElement = driver.findElement(By.xpath(".//*[@id='secondary']/div[1]/div[2]/div/div[2]/ul")); 


    List<WebElement> allBrands = parentElement.findElements(By.cssSelector("li >a")); 
    List<WebElement> allBrandsInShowAll =secondParentElement.findElements(By.cssSelector("li >a")); 

    System.out.println("Total No of Brands "+(allBrands.size() + allBrandsInShowAll.size())); 

    for(WebElement ele :allBrands) { 
    System.out.println("Name=>"+ele.getText()); 
    } 

    for(WebElement ele :allBrandsInShowAll) { 
     System.out.println("Name=>"+ele.getText()); 
     } 

    driver.quit(); 

    } 

    } 

Dies druckt alle Kategorien innerhalb des Brands-

Gesamt Keine von 13 Marken

  • Name => Cobra Golf (14)
  • Name => CallawayGolf (10)
  • Name => TaylorMade- (8)
  • Name => Ping (6)
  • Name => Benross (4)
  • Name => NikeGolf (2)
  • Name => Titleist (2)
  • Name => Wilson (2)
  • Name => WilsonStaff (2)
  • Name => Fazer 012.351.(1)
  • Name => MizunoGolf (1)
  • Name => USKidsGolf (1)
  • Name => WilsonDeepRed (1)
+0

Danke für Ihre Hilfe. Wenn ich den cssSelector benutze, der hier erwähnt wird, bekomme ich "ElementNotInteractableException" und mit dem xpath "Show All" Button wird nicht geklickt. .. Ich brauche die Werte von innen Alle anzeigen Button .. sie sind -> MizunoGolf (1) USKidsGolf (1) WilsonDeepRed (1) Ich konnte die Werte von angezeigten UI-Teil – bbk

+0

Sie können die verwenden XPath auch. Ich habe das auch hinzugefügt. – demouser123

+0

yeah Danke demouser123, aber ich sollte in der Lage sein, die Werte von innen Show All Button .... Aber kein Glück :(so weit .. – bbk

Verwandte Themen