Webdriver - 流畅的等待和IE的问题

时间:2014-05-23 14:29:45

标签: java internet-explorer selenium selenium-webdriver

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

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

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

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

这是我用于流利等待的代码。我从第一个下拉列表中选择一个值。然后我使用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);
    }

1 个答案:

答案 0 :(得分:0)

我发现IE10的最佳解决方案是等待页面加载。我以前正在等待一个元素出现在页面上,但有时即使显示了IE,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");
                        }});    
    }