在java中的3下拉列表中传递值

在java中的3下拉列表中传递值,java,selenium-webdriver,dropdown,Java,Selenium Webdriver,Dropdown,我需要做一个轮胎网站的爬虫。为此,我需要提取所有维度,然后在3个下拉列表中传递该维度,单击搜索按钮并提取每个产品的品牌名称和价格。然后返回到下一组尺寸并..重复,直到完成所有尺寸 for (int i = 0; i < tyreWidth.size(); i++) { String option1 = tyreWidth.get(i).getText(); dropdownWidth.selectByIndex(i);

我需要做一个轮胎网站的爬虫。为此,我需要提取所有维度,然后在3个下拉列表中传递该维度,单击搜索按钮并提取每个产品的品牌名称和价格。然后返回到下一组尺寸并..重复,直到完成所有尺寸

for (int i = 0; i < tyreWidth.size(); i++) {
            String option1 = tyreWidth.get(i).getText();
            dropdownWidth.selectByIndex(i);
            Thread.sleep(3000);

            tyreSections = dropdownSection.getOptions();
            for (int j = 0; j < tyreSections.size(); j++) {
                String option2 = tyreSections.get(j).getText();
                dropdownSection.selectByIndex(j);
                Thread.sleep(3000);
                tyreDiameter = dropdownDiameter.getOptions();

                for (int k = 0; k < tyreDiameter.size(); k++) {
                    dropdownDiameter.selectByIndex(k);
                    Thread.sleep(3000);
                        driver.findElement(By.xpath(
                                ".//*[@id='content-groesse']/div[3]/span[2]/button"))
                                .click();// search button
                        driver.findElement(By.xpath(
                                ".//*[@id='bottomArticleCount']/ul/li[3]/button"))
                                .click();// search all oferts
                        driver.navigate().back();
                        driver.navigate().back();
                        Thread.sleep(1000);
                        listDimensions.add(option1 + " " + option2 + " "
                                + tyreDiameter.get(k).getText());
                        System.out.println(option1 + " " + option2 + " "
                                + tyreDiameter.get(k).getText());
                    }

                        tyreDiameter.removeAll(tyreDiameter);
                            }
            tyreSections.removeAll(tyreSections);
        }

        for (int i = 0; i < listDimensions.size(); i++) {
            writer.println(listDimensions.get(i));

        }
        writer.close();

    }
for(int i=0;i

问题:这仅适用于第一组维度。有什么建议吗?谢谢。

大部分代码看起来不错。我假设在更高的地方有一条线,类似于:

List<WebElement> tyreWidth = dropdownWidth.getOptions();

添加
clickOut()在每个
语句之后。选择ByIndex()
语句,在
sleep()之前。这将导致下拉列表失去焦点,并可能导致二级和三级下拉列表正确填充。

两个问题;1) 当你说“只对第一组有效”时,你是指一次迭代,还是指在第一次运行后出现错误?2) 您能否确认
tyreWidth.size()>1
?如果没有HTML和如何定位元素,就会有很多黑框。在第一次运行后,下拉列表中的值会与原始值发生变化。打开页面时的值为(205,55,R16)。因此,在第一次迭代之后,下一组值就是原始值。我是一个初学者,我希望我的解释是清楚的
public void clickOut() {
    driver.findElement(By.tagName("body")).click();
}