2012-07-24 53 views
2

我知道顶级webdriver API不提供对页面加载事件处理程序的访问,但是有什么办法(包括通过REST接口直接向服务器发送命令)直接调用硒服务器来强制页面加载块的行为?我知道等待元素破解,但我宁愿直接去源代码,如果可能的话。我遇到的具体问题是一个页面,当单击一个按钮时会进行JS调用,在页面上显示模态对话框,同时发生一些后端进程,然后在后端工作完成后将浏览器转发到新页面。由于点击操作并不直接触发新页面,因此硒不会阻止该事件(并且无论如何我都不希望它在所有情况下都会)。在Selenium Webdriver中显式触发页面加载阻塞

我已经查看了Command类的任何看起来很有希望的命令,但没有看到任何东西。我发现http://code.google.com/p/selenium/wiki/JsonWireProtocol,但它也没有帮助...

+0

什么隐含的期待? – 2012-07-25 07:34:50

回答

1

这是一个棘手的。

在selenium/webdriver中访问http状态不是很方便。 我会推荐一个实用的方法。国际海事组织等待元素的方法不是黑客,它是正确的方式来做到这一点。在你的情况下,我会等待selenium.getLocation()或webdriver.getCurrentUrl()包含一个期望的值。

事情是这样的:

webDriverWait.until(new Function<WebDriver, WebElement>() { 
    @Override 
    public WebElement apply(WebDriver driver) { 
     //TODO: pass expected url as parameter 
     boolean expectedUrl = driver.getCurrentUrl().contains("your redirect url"); 
     if (expectedUrl) { 
      //If not null is returned, we have found something and waitUntil stops 
      return new RemoteWebElement(); 
     } 
     //try again 
     return null; 
    } 
}); 
+0

我不能使用等待模块(至少现在没有进行一些严重的修改),因为我实际上直接插入webdriver.execute来控制我的测试框架中的页面加载事件,而且我需要修改wait请注意页面加载特殊情况。我写了自己的等待方法,并将其附加到webdriver(需要重构它到一个适当的子类,但这是为了以后),并试图等待url更改,但问题是,只是因为url是预期的不意味着页面已加载并准备就绪。当处理新窗口时,这成为额外的问题。 – 2012-07-25 13:25:12

相关问题