2017-07-02 21 views
0

我正在爲一些網絡創建一個自動測試,我正在使用WebDriver和用Java編寫的代碼。我在這裏面臨兩個問題。列表<WebElement>給出空白結果

  1. click()方法不起作用。
  2. 當我試圖讀取WebElement的列表顯示爲空白。但它顯示正確size()

我的代碼:

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

你有沒有驗證的XPath,你正在嘗試獲取元素? xpath可能是錯誤的。 –

+0

你想要在** allBrandsInShowAll **中獲得什麼? –

+0

Xpath是正確的。我驗證了它。請檢查此網址「http://www.americangolf.co.uk/golf-clubs/fairway-woods」allBrandsInShowAll應該保留[+ Show All]按鈕點擊後的值。 [li值在不同的div下] – bbk

回答

0
  1. 您可以簡單地使用CSS選擇div.showall從品牌選擇點擊勾住ShowAll按鈕。

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

甚至這個XPath直接作用

driver.findElement(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/div[1]/a")).click() 
  • ,你花了獲取getText()父元素是不正確

    List<WebElement> allBrands = driver.findElements(By.xpath("//*[@id='secondary']/div[1]/div[2]/div/ul/li/a")); 
    
  • 這將在單個li孩子中獲得所有a標記元素。你需要進入所有的li孩子,並獲得他們的錨文本。

    需要像這樣

    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()); 
        } 
    

    它打印輸出作爲

    名稱=> CobraGolf (14)

    名稱=> CallawayGolf (10)

    Name => TaylorMade (8)


    編輯:OP提到他是不是能夠拿到其他品牌的選擇,一旦ShowAll按鈕被點擊。原因是他們在另一個div > ul孩子。

    請修改您的最終代碼本 -

    //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(); 
    
        } 
    
        } 
    

    此打印旗下

    共有品牌13號內的所有類別

    • 名稱=> CobraGolf (14 )
    • Name => CallawayGolf (10)
    • 名稱=>泰勒梅 (8)
    • 名稱=>平 (6)
    • 名稱=> Benross (4)
    • 名稱=> NikeGolf (2)
    • 名稱=> Titleist的 (2)
    • 名稱=>威爾遜 (2)
    • 名稱=> WilsonStaff (2)
    • 名稱=>法瑟 (1)
    • 名稱=> MizunoGolf (1)
    • 名稱=> USKidsGolf (1)
    • 名稱=> WilsonDeepRed (1)
    +0

    感謝您的幫助。如果我使用這裏提到的cssSelector ..我得到「ElementNotInteractableException」,並與xpath「全部顯示」按鈕不會被點擊。我需要內部顯示所有按鈕的值..他們是 - > MizunoGolf(1) USKidsGolf(1) WilsonDeepRed(1) 我能夠從顯示的UI部分獲取值 – bbk

    +0

    您可以使用xpath也。我也補充說。 – demouser123

    +0

    是謝謝demouser123,但我應該能夠檢索裏面顯示所有按鈕的值....但沒有運氣:(到目前爲止.. – bbk