据我所知,顶级webdriver API不提供对页面加载事件处理程序的访问,但是有没有办法(包括通过REST接口直接向服务器发送命令)直接调用selenium服务器强制页面加载阻止行为?我知道等待元素黑客,但我宁愿直接去源,如果可能的话。我遇到的具体问题是一个页面,当单击一个按钮时会进行JS调用,当某些后端进程发生时会在页面上显示模式对话框,然后在后端工作完成后将浏览器转发到新页面。由于点击操作不会直接触发新页面,因此selenium不会阻止该事件(并且无论如何我都不会想要它)。
我已经通过Command类查看了任何有希望看的命令,但没有看到任何内容。我找到了http://code.google.com/p/selenium/wiki/JsonWireProtocol,但它也无济于事......
答案 0 :(得分:1)
这是一个棘手的问题。
在selenium / webdriver中访问http状态不是很方便。 我会推荐一种务实的方式。 IMO等待元素的方法不是黑客,它是正确的方法。在你的情况下,我会等待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;
}
});