Существует полностью кросс-браузерный способ сделать это с помощью веб-драйвера, те, кто говорит, что вы не можете, просто слишком ленивы. Во-первых, вам нужно использовать WebDriver для внедрения и привязки тега к странице, которая открывает нужную вкладку. Вот как я это делаю (примечание: драйвер — это экземпляр WebDriver):
/**
* Executes a script on an element
* @note Really should only be used when the web driver is sucking at exposing
* functionality natively
* @param script The script to execute
* @param element The target of the script, referenced as arguments[0]
*/
public void trigger(String script, WebElement element) {
((JavascriptExecutor)driver).executeScript(script, element);
}
/** Executes a script
* @note Really should only be used when the web driver is sucking at exposing
* functionality natively
* @param script The script to execute
*/
public Object trigger(String script) {
return ((JavascriptExecutor)driver).executeScript(script);
}
/**
* Opens a new tab for the given URL
* @param url The URL to
* @throws JavaScriptException If unable to open tab
*/
public void openTab(String url) {
String script = "var d=document,a=d.createElement('a');a.target='_blank';a.href='%s';a.innerHTML='.';d.body.appendChild(a);return a";
Object element = trigger(String.format(script, url));
if (element instanceof WebElement) {
WebElement anchor = (WebElement) element; anchor.click();
trigger("var a=arguments[0];a.parentNode.removeChild(a);", anchor);
} else {
throw new JavaScriptException(element, "Unable to open tab", 1);
}
}
Затем вам нужно указать веб-драйверу переключить текущий дескриптор окна на новую вкладку. Вот как я это делаю:
/**
* Switches to the non-current window
*/
public void switchWindow() throws NoSuchWindowException, NoSuchWindowException {
Set<String> handles = driver.getWindowHandles();
String current = driver.getWindowHandle();
handles.remove(current);
String newTab = handles.iterator().next();
locator.window(newTab);
}
После этого вы можете взаимодействовать с элементами в контексте новой страницы, используя тот же экземпляр WebDriver. Как только вы закончите с этой вкладкой, вы всегда можете вернуться к контексту окна по умолчанию, используя механизм, аналогичный описанной выше функции switchWindow. Я оставлю это в качестве упражнения для вас, чтобы понять.
person
Jonathan Azoff
schedule
03.02.2012