2017-01-21 132 views
0

getoption用於從下拉菜單檢索值時,硒List<WebElement>返回零。硒列表<WebElement>總是返回空值

代碼片段:

public class FaceBookdropDownMenu { 
    public static void main(String[] args) throws InterruptedException { 
     System.getProperty("webdriver.gecko.driver", "//usr//local//bin//geckodriver 6"); 
     WebDriver driver = new FirefoxDriver(); 
     driver.manage().window().maximize(); 
     driver.get("https://www.facebook.com/"); 

     WebElement month_dropdown = driver.findElement(By.id("month")); 
     //return a list of month names 
     System.out.println(month_dropdown.getText()); 
     List<WebElement> month_lists = driver.findElements(By.id("month")); 
     int total_month= month_lists.size(); 
     // returns 1 instead of 12 
     System.out.println("Total month count is"+ total_month); 

     for(WebElement ele:month_lists) { 
      String month_name = ele.getText(); 
      System.out.println("Months are:"+ month_name); 
     } 
    } 
} 

==================================== ================================== 我用的是getOptions(),但它不工作,要麼

WebElement month_dropdown =driver.findElement(By.id("month")); 
System.out.println(month_dropdown.getText()); 
Select month_dd = new Select(month_dropdown); 
List <WebElement> month_lists = month_dd.getOptions();  
int total_month= month_lists.size(); 
//Zero is returned instead of 12 
System.out.println("Total month count is"+ total_month); 

for(WebElement ele:month_lists) { 
    String month_name = ele.getText(); 
    System.out.println("Months are:"+ month_name); 
} 
+0

究竟是你想做些什麼?我覺得你並不遙遠,但很難理解你想做什麼。 – ProgrammersBlock

+0

我想顯示月份總數(12)並列出月份名稱,1月至12月 – Ant

+0

請發佈相關HTML – JeffC

回答

0

下面的代碼爲我工作:

import java.util.List; 
import java.util.Random; 
import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.Select; 
import org.openqa.selenium.support.ui.WebDriverWait; 

public class FacebookDateSelect { 

    public static void main(String[] args) { 


     WebDriver driver = new ChromeDriver(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     driver.get("https://www.facebook.com/"); 
     driver.manage().window().maximize(); 

     WebDriverWait wait = new WebDriverWait(driver, 20); 
     WebElement month_dropdown = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("month"))); 
     Select month_dd = new Select(month_dropdown); 
     List <WebElement> month_lists = month_dd.getOptions();  
     int total_month= month_lists.size(); 
     System.out.println("Total month count is"+ total_month); 

     for(WebElement ele:month_lists) { 
      String month_name = ele.getText(); 
      System.out.println("Months are:"+ month_name); 
     } 

     //updated code - to select random option using Random class 
     month_dd.selectByIndex(new Random().nextInt(user_country.getOptions().size())); 
     driver.quit(); 

    } 

} 

在你的代碼,

List<WebElement> month_lists = driver.findElements(By.id("month")); 

總是返回一個元素,因爲只有一個ID爲month的元素。這確實返回它裏面的選項(使用getOptions方法)

我做的另一個更改是使用WebDriverWait,具有明確的等待條件(直到網頁上顯示月下拉列表),檢查給定的持續時間( 20秒)。如果在第一秒發現元素,元素將被返回,它不會等到20秒。同樣,如果元素在20秒後未找到,則會拋出異常。

輸出我:

Starting ChromeDriver 2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed) on port 6720 
Only local connections are allowed. 
Total month count is13 
Months are:Month 
Months are:Jan 
Months are:Feb 
Months are:Mar 
Months are:Apr 
Months are:May 
Months are:Jun 
Months are:Jul 
Months are:Aug 
Months are:Sept 
Months are:Oct 
Months are:Nov 
Months are:Dec 
+0

OP已經嘗試過使用'Select',但它並不適用於他。那麼下拉菜單中的getText()如何解決問題呢? – Guy

+0

@Guy OP發佈的相同代碼爲我工作時,我沒有任何修改運行。爲'getText'和'getOptions'方法增加了輸出。所以,我認爲這是一個與頁面加載有關的問題,所以使用'Explicit Wait'更新了代碼。 OP,請更新我的代碼是否工作, –

+0

// //第一個選項 - 使用getText方法評論是由您添加的,您似乎認爲它是一個解決方案。 – Guy