如何从下拉列表循环中选择所有列表选项,选择每个选项,然后使用selenium webdriver单击“提交”按钮

时间:2014-02-05 20:32:03

标签: java selenium selenium-webdriver

以下是使用下拉列表打印所有页面的名称和含义列的链接

尝试构建以下脚本: 1.转到http://babynames.merschat.com/index.cgi?function=Search&origin=Sanskrit&gender=f 2.将名称和含义列打印到syso。

我能够打印第1页,因为它是默认页面。 这是代码:

公共课BabyNamesAndMeanings {

WebDriver driver = new FirefoxDriver();

@BeforeClass
public void setUp() {
    driver.get("http://babynames.merschat.com/index.cgi?function=Search&origin=Sanskrit&gender=f");
    driver.manage().window().maximize();
}

@Test
public void printBabyNamesAndMeaningsOfFirstPage() {
    WebElement baby_names = driver
            .findElement(By
                    .xpath("//tbody/tr[7]/td[3]/table[2]/tbody/tr[2]/td[2]/font/table[1]/tbody"));

    List<WebElement> names = baby_names.findElements(By
            .xpath("//tr/td[1]/font/a"));
    List<WebElement> meanings = baby_names.findElements(By
            .xpath("//tr/td[4]/font/a"));

    for (int i = 0; i < names.size(); i++) {

        System.out.println("Name: " + names.get(i).getText()
                + " Meaning:  " + meanings.get(i).getText());
    }

}

我不知道如何循环浏览页面底部下拉列表中的其他选项,然后点击提交按钮以打印所有页面的名称和含义。 有100多页。

提前致谢。

2 个答案:

答案 0 :(得分:1)

以下代码将完成您的工作。

driver.get("http://babynames.merschat.com/index.cgi?function=Search&origin=Sanskrit&gender=f");
List<WebElement> pageOptions = new Select(driver.findElement(By.xpath("//select[@name='page']"))).getOptions();//Get all options in dropdown
ArrayList<String> pageDd = new ArrayList<String>();
for(WebElement eachPage:pageOptions){
    pageDd.add(eachPage.getText());//Save text of each option
}
int i=1;
for(String eachVal:pageDd){
    new Select(driver.findElement(By.xpath("//select[@name='page']"))).selectByVisibleText(eachVal);//Select page
    driver.findElement(By.xpath("//input[@value='Go']")).click();//Click on go
    List<WebElement> names = driver.findElements(By.xpath("//a[contains(@title,' meanings and popularity')]"));//Get all names on page
    for(WebElement eachName:names){
        String name = eachName.getText(); //Get each name's text
        WebElement mean = eachName.findElement(By.xpath("./../../..//a[contains(@title,'Names for baby with meanings like ')]"));//Get meaning for that name
        String meaning = mean.getText();//Get text of meaning
        System.out.println(i+") Name: " +name+ " Meaning:  " + meaning);//Print the data
        i++;
    }
}

尝试并了解实现要求的方式。如果您有任何疑问,请询问。

答案 1 :(得分:0)

另一种迭代并选择所有Dropdown值的方法

Select dropdown= new Select(WebUIDriver.webDr.findElement(By.xpath("enter xpath")));
int noOfDropDownValues=  dropdown.getOptions().size()-1;

for(int i=0;i<noOfDropDownValues;i++){
    new Select(WebUIDriver.webDr.findElement(By.xpath("Enter Xpath']"))).selectByValue(String.valueOf(i));
}