gpt4 book ai didi

java - WebDriver 打开新标签

转载 作者:IT老高 更新时间:2023-10-28 20:24:24 30 4
gpt4 key购买 nike

我已经搜索了网络和 WebDriver API。我看不到使用 WebDriver/Selenium2.0 打开新标签的方法。

有人可以确认我是否正确吗?

谢谢,克里斯。P.S:我看到的当前替代方法是在同一窗口中加载不同的网址或打开新窗口。

最佳答案

使用 webdriver 完全有一种跨浏览器的方法可以做到这一点,那些说你不能的人只是太懒了。首先,您需要使用 WebDriver 将标签注入(inject)并锚定到打开您想要的选项卡的页面中。我是这样做的(注意:驱动程序是一个 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);
}
}

接下来,您需要告诉 webdriver 将其当前窗口句柄切换到新选项卡。我是这样做的:

/**
* 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 函数类似的机制返回到默认窗口上下文。我将把它作为练习留给你来解决。

关于java - WebDriver 打开新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421988/

30 4 0