Sam*_*mmi 7 java selenium-webdriver
我打开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);
Run Code Online (Sandbox Code Playgroud)
现在我想转到我打开GMail链接的选项卡.我已经搜索了N个解决方案,但没有一个有效.
例如
解决方案1:
String Tab1 = wd.getWindowHandle();
ArrayList<String> availableWindows = new ArrayList<String>(wd.getWindowHandles());
if (!availableWindows.isEmpty()) {
wd.switchTo().window(availableWindows.get(1));
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");
Run Code Online (Sandbox Code Playgroud)
请建议.我坚持这个.
pca*_*ins 10
在我看来,driver.getWindowHandles()不适用于标签...你总是会使用CURRENT标签的句柄返回一个项目数组... [删除旧答案,因为这似乎现在已修复]
更新(2016年6月16日):当前版本的Selenium(服务器独立2.53.0)似乎采取了不同的行动.现在我正在使用这样的东西来打开/切换驱动程序到新选项卡:
更新(2016年11月16日):Selenium 3.0.1似乎又改变了一些东西?我现在必须使用javascript打开一个新标签.这似乎只适用于Chrome ... Firefox打开一个新窗口.我将看看是否可以使用geckodriver的设置(功能/配置文件?)更改该行为.
// 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());
Run Code Online (Sandbox Code Playgroud)
getWindowHandles()方法现在返回一个Set.到目前为止,这只在Chrome中进行了测试,因为Firefox 47目前在使用firefoxdriver时遇到了一些严重的问题......并且使用geckodriver时,Actions根本无法正常工作.[更新6/11/2016]:Firefox通过geckodriver现在返回一个Set]
你也可以做这样的事情..把它投射到ArrayList:
// 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));
Run Code Online (Sandbox Code Playgroud)
更新:为了解决geckodriver错误,我已经切换到使用element.sendkeys ...这样的东西似乎在Marionette和Chrome中工作..(Update2):由于Selenium 3.0.1中的更改而更新为javascript:
// 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());
Run Code Online (Sandbox Code Playgroud)
更新(2016年11月16日):使用Ctrl-W关闭的旧方法似乎也被破坏了...使用这个:
((JavascriptExecutor)driver).executeScript("close();");
Run Code Online (Sandbox Code Playgroud)
我们手动切换到下一个标签的方式是按 - CTRL + Page Down我们可以像使用Selenium一样 -
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.PAGE_DOWN);
Run Code Online (Sandbox Code Playgroud)
您有一个可能的正确解决方案(Sol2),但问题是您无法切换到新选项卡,直到它无法完全加载。
所以,解决方案: 1)坏的一个:放入一个等待计时器,只需睡眠(2000)一段时间,然后
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");
Run Code Online (Sandbox Code Playgroud)
2)好一个!
使用原生硒的东西。首先获取所有打开的可用选项卡:
driver.getWindowHandle();
Run Code Online (Sandbox Code Playgroud)
然后切换到另一个选项卡:
driver.switchTo().window(myWindowHandle );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48150 次 |
| 最近记录: |