我打开Google.com,然后点击“Gmail”超链接,一个新的标签就在同一浏览器上打开了。
现在我想切换到这个新选项卡,在这里使用Selenium WebDriver打开GMail。
WebDriver wd = new ChromeDriver();
wd.get("https://www.google.co.in/?gws_rd=ssl");
wd.findElement(By.linkText("Gmail")).sendKeys(Keys.CONTROL,Keys.RETURN);
String Tab1 = wd.getWindowHandle();
ArrayList<String> availableWindows = new ArrayList<String>(wd.getWindowHandles());
if (!availableWindows.isEmpty()) {
wd.switchTo().window(availableWindows.get(1));
}
解决方案2:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");
敬请建议。我被困在这上面了。
在我看来,driver.getWindowHandles()对选项卡不起作用...您总是会得到一个带有当前选项卡句柄的one item数组...[删除旧答案,因为现在似乎已经修复]
更新(6/16/2016):当前版本的Selenium(服务器独立2.53.0)似乎有不同的行为。现在我正在使用类似这样的东西来打开/切换驱动程序到新的选项卡:
更新(11/16/2016):硒3.0.1似乎又改变了事情?我现在必须使用javascript打开一个新标签。这似乎只适用于Chrome...Firefox打开了一个新窗口。我将看看是否可以使用GeckoDriver的设置(capability/profile?)更改该行为。
// Actions actions = new Actions(driver);
// actions.keyDown(Keys.CONTROL).sendKeys("t").keyUp(Keys.CONTROL).build().perform();
((JavascriptExecutor)driver).executeScript("window.open('about:blank', '_blank');");
Set<String> tab_handles = driver.getWindowHandles();
int number_of_tabs = tab_handles.size();
int new_tab_index = number_of_tabs-1;
driver.switchTo().window(tab_handles.toArray()[new_tab_index].toString());
// set tab_index to the number of window/tab you want. 0 is the first tab
ArrayList<String> tabs_windows = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs_windows.get(tab_index));
// driver.findElement(By.cssSelector("body")).sendKeys(Keys.chord(Keys.CONTROL, "t"));
((JavascriptExecutor)driver).executeScript("window.open('about:blank', '_blank');");
Set<String> tab_handles = driver.getWindowHandles();
int number_of_tabs = tab_handles.size();
int new_tab_index = number_of_tabs-1;
driver.switchTo().window(tab_handles.toArray()[new_tab_index].toString());
更新(11/16/2016):使用Ctrl-W关闭的旧方法似乎也被打破了...使用此:
((JavascriptExecutor)driver).executeScript("close();");
问题内容: 我们开发了一个Chrome扩展程序,我想用Selenium测试我们的扩展程序。我创建了一个测试,但是问题是我们的扩展程序在安装后会打开一个新选项卡,我认为我从另一个选项卡中得到了例外。是否可以切换到我正在测试的活动标签?另一个选择是先禁用扩展名,然后登录到我们的网站,然后再启用该扩展名。可能吗?这是我的代码: 测试失败,原因是,因为在新选项卡(由扩展名打开)中,“登录”不可见(我认为仅
是否有可能在运行时使用Appium从一个应用程序切换到另一个应用程序。 谢啦
我正在打开一个页面,执行一些操作,我正在使用这段代码在下一个选项卡中打开另一个链接 字符串url=“https://qa.logfireapps.com/lgf_700_qa_rf”; String args1=String.format(“window.open(”%s“,”%s“);”,url,“new”); ((JavascriptExecutor)driver).ExecuteScript
确切错误消息:线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:1,大小:1(java)。util。ArrayList。rangeCheck(ArrayList.java:653) 代码段:
将Selenium WebDriver与Java结合使用。我正在尝试自动化一个功能,其中我必须打开一个新的选项卡,在那里做一些操作,并回到以前的选项卡(父)。我用了开关手柄,但它不起作用。还有一件奇怪的事情,两个选项卡有相同的窗口句柄,因此我不能在选项卡之间切换。 然而,当我尝试使用不同的Firefox窗口时,它都能工作,但是对于tab它就不行了。 请帮帮我.我如何切换标签。或者我如何切换选项卡而
我正在构建一个定制的Java库。我把我的大部分“重复”代码都保存在那里,比如文件处理、字符串处理等。每次我想使用它们时,我都必须将该类复制并粘贴到我正在进行的其他项目中。有没有办法让这个自定义库类成为“依赖项”?我在用我的智能手机。