2

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

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

4

1 回答 1

1

这是一个棘手的问题。

在 selenium/webdriver 中访问 http 状态不是很方便。我会推荐一种务实的方式。IMO 等待元素的方法不是 hack,它是正确的方法。在您的情况下,我会等待 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;
    }
});
于 2012-07-25T12:13:24.303 回答