Java Webdriver-fluent wait和IE的问题

Java Webdriver-fluent wait和IE的问题,java,internet-explorer,selenium,selenium-webdriver,Java,Internet Explorer,Selenium,Selenium Webdriver,我正在使用Java和webdriver自动化测试。此测试用于2个下拉列表,并具有向下搜索功能。因此,第一个下拉列表包含选项列表,第二个下拉列表将根据用户在第一个下拉列表中选择的内容以不同方式填充。我正在尝试在第一个下拉列表中选择所有不同的选项,并验证在第二个下拉列表中是否有正确的选项可用。例如,第一个下拉列表可以有选项A和B。如果我选择A,第二个下拉列表将有选项1、2和3。如果我选择B,第二个下拉列表将有选项8、9和10 在更改第一个下拉列表中的值时,我遇到了一个问题。当我选择一个应用程序时,w

我正在使用Java和webdriver自动化测试。此测试用于2个下拉列表,并具有向下搜索功能。因此,第一个下拉列表包含选项列表,第二个下拉列表将根据用户在第一个下拉列表中选择的内容以不同方式填充。我正在尝试在第一个下拉列表中选择所有不同的选项,并验证在第二个下拉列表中是否有正确的选项可用。例如,第一个下拉列表可以有选项A和B。如果我选择A,第二个下拉列表将有选项1、2和3。如果我选择B,第二个下拉列表将有选项8、9和10

在更改第一个下拉列表中的值时,我遇到了一个问题。当我选择一个应用程序时,webdriver会在加载之前尝试检查第二个下拉列表中的1、2和3是否可用。这导致我的测试失败

为了解决这个问题,我添加了一个流畅的等待第二个下拉列表。因此,如果我在第一个下拉列表中选择A或B,它会等到第二个下拉列表加载后再检查可用选项。这个解决方案非常适合在chrome和firefox中进行测试。然而,当使用IE10时,它没有帮助。当我在IE10中运行测试时,它仍然试图在加载第二个下拉列表之前检查它们的值,这导致我的测试失败

是否有人在使用IE时遇到流畅等待的问题。我能让它在IE中工作的唯一方法是添加一条睡眠线。如果我使用像sleep2000这样的东西,它似乎是有效的。但是,如果网页运行缓慢且加载时间较长,则仍可能导致测试失败

下面是我用于fluent wait的代码。我正在从第一个下拉列表中选择一个值。然后我使用smartSleep等待第二个下拉列表,然后检查该下拉列表中的值。请让我知道,如果需要更多的信息来帮助理解我的问题

public void smartSleep(String selector){
        //log.info("INFO: waiting for the selector to appear");
        fluentWaitPresent(selector);
        log.info("INFO: Smart Sleep waited for: " +selector);
    }

我发现IE10的最佳解决方案是等待页面加载。我以前一直在等待某个元素出现在页面上,但有时IE即使显示了该元素也找不到它。下面是我正在使用的等待方法,它适用于所有版本的IE

public boolean waitForPageLoaded(RCLocationExecutor driver) throws Exception {
            String fluentWaitTimeout = customParameters.get(CustomParameterNames.FLUENT_WAIT_TIMEOUT);
            log.info("INFO: setting the fluent wait timeout at: "+fluentWaitTimeout);
                Wait<RCLocationExecutor> wait = new FluentWait<RCLocationExecutor>(driver)
                        .withTimeout(Long.valueOf(fluentWaitTimeout), TimeUnit.SECONDS)
                        .pollingEvery(1, TimeUnit.SECONDS)
                        .ignoring(ElementNotFoundException.class);

               return wait.until(new Function<RCLocationExecutor, Boolean>(){

                        public Boolean apply(RCLocationExecutor driver){                                
                            return  driver.executeScript("return document.readyState").equals("complete");
                        }});    
    }