无法切换到';当前活动选项卡';在chrome中使用java中的webdriver
我无法使用WebDriver切换到Chrome中的“当前活动选项卡”。我尝试了以下方法:无法切换到';当前活动选项卡';在chrome中使用java中的webdriver,java,selenium,selenium-webdriver,tabs,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Tabs,Selenium Chromedriver,我无法使用WebDriver切换到Chrome中的“当前活动选项卡”。我尝试了以下方法: 我们可以切换到tab,但是我们不知道哪一个是当前活动选项卡 我尝试了driver.switchTo().activeElement(),但是没有任何帮助 我尝试了驱动程序。switchTo().Window(“”)无效 尝试了以下代码段 Set allWindowHandles=driver.getWindowHandles(); 用于(字符串windowHandle:allWindowHandles){
我们可以切换到tab,但是我们不知道哪一个是当前活动选项卡
driver.switchTo().activeElement()
,但是没有任何帮助驱动程序。switchTo().Window(“”
)无效Set allWindowHandles=driver.getWindowHandles();
用于(字符串windowHandle:allWindowHandles){
如果(!windowHandle.equals()){
driver.switchTo().window(windowHandle);
}
}
但是,获取当前活动选项卡句柄是一个问题。已更新- 以下是使用多个窗口/选项卡(即两个或两个以上的窗口/选项卡)的工作代码(C#,用Chrome测试)。 使用这种方法,您可以从任何选项卡切换到任何其他选项卡。(代码未优化,您可以进一步优化。)
[测试]
公共无效多窗口()
{
IWebDriver驱动程序=新的ChromeDriver(@“G:\Selenium\Tools\Selenium\”;
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(60));
List allWindowHandles=new List();
List allCapturedWindowHandles=new List();
字符串currentWidowHandle=null;
//导航到URL
driver.Navigate().gotour(@)http://www.w3schools.com/js/");
driver.Manage().Window.Maximize();
//获取第一个窗口句柄
currentWidowHandle=driver.CurrentWindowHandle;
添加(currentWidowHandle);
Thread.Sleep(2000);//不建议使用静态等待
Console.WriteLine(“\n第一个选项卡标题:“+driver.Title”);
Console.WriteLine(“第一个选项卡URL:+driver.URL”);
//打开新选项卡的代码
//单击链接打开“新建”选项卡
IWebElement TryItYourselfLinkJS=driver.findelelement(由.CssSelector(“a[href='tryit.asp?filename=tryjs\u myfirst']));
TryItYourselfLinkJS.Click();
Thread.Sleep(5000);//不建议使用静态等待
//将所有窗口句柄存储在列表中
allWindowHandles=driver.WindowHandles.ToList();
//获取新窗口句柄,该句柄不等于第一个选项卡。
for(int i=0;idiv>div>a:n类型(4)”);
topNavigationCSS.Click();
//单击链接打开第三个选项卡
IWebElement TryItYourselfLinkCSS=wait.Until((d)=>{return driver.FindElement(由.CssSelector(“div[class='w3-example']>a[href='tryit.asp?filename=trycss_default']););
TryItYourselfLinkCSS.Click();
Thread.Sleep(5000);//不建议使用静态等待
//将所有窗口句柄存储在列表中
allWindowHandles=driver.WindowHandles.ToList();
//获取新窗口句柄,该句柄不等于前两个选项卡。
for(int i=0;i
希望这有帮助:)您使用了多少个选项卡?您好,amitbobade,谢谢您的回复,但是如果“allWindowHandles.count”大于5左右,那么它会选择哪个选项卡?在您的逻辑情况下,它可能会设置循环中的最后一个选项卡,这将是不正确的,因为所有其他4个窗口都不等于parentWindow。我更新了代码,使其可以使用两个到两个以上的窗口/选项卡。您可以从任何选项卡切换到任何选项卡。我希望这就是你想要的。我有三个
Set<String> allWindowHandles = driver.getWindowHandles();
for (String windowHandle : allWindowHandles) {
if (!windowHandle.equals(<cannot get the active window handle>)) {
driver.switchTo().window(windowHandle);
}
}
[Test]
public void MultipleWindows()
{
IWebDriver driver = new ChromeDriver(@"G:\Selenium\Tools\Selenium\");
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
List<string> allWindowHandles = new List<string>();
List<string> allCapturedWindowHandles = new List<string>();
string currentWidowHandle = null;
//Navigate to URL
driver.Navigate().GoToUrl(@"http://www.w3schools.com/js/");
driver.Manage().Window.Maximize();
//Get First Window Handle
currentWidowHandle = driver.CurrentWindowHandle;
allCapturedWindowHandles.Add(currentWidowHandle);
Thread.Sleep(2000); //Static wait is not recommended
Console.WriteLine("\nFirst Tab Title: " + driver.Title);
Console.WriteLine("First Tab URL: " + driver.Url);
//Code to open new tab
//Click on the link to open new tab
IWebElement TryItYourselfLinkJS = driver.FindElement(By.CssSelector("a[href='tryit.asp?filename=tryjs_myfirst']"));
TryItYourselfLinkJS.Click();
Thread.Sleep(5000); //Static wait is not recommended
//Store all window handles in a list
allWindowHandles = driver.WindowHandles.ToList();
//Get new window handle, the one which is not equals to first tab.
for (int i = 0; i < allWindowHandles.Count; i++)
{
int k = 0;
for (int j = 0; j < allCapturedWindowHandles.Count; j++)
{
if (allWindowHandles[i] == allCapturedWindowHandles[j])
{
k++;
}
}
if (k == 0)
{
allCapturedWindowHandles.Add(allWindowHandles[i]);
}
}
//Switch to new window handle i.e. second tab
driver.SwitchTo().Window(allCapturedWindowHandles[1]);
Thread.Sleep(6000); //Static Wait is not recommended
Console.WriteLine("\nSwitched to Second Tab. \nSecond Tab Title: " + driver.Title);
Console.WriteLine("Second Tab URL: " + driver.Url);
//Swich back to first window
driver.SwitchTo().Window(allCapturedWindowHandles[0]);
Thread.Sleep(5000); //Static wait is not recommended
Console.WriteLine("\nSwitched to First Tab. \nFirst Tab Title: " + driver.Title);
Console.WriteLine("First Tab URL: " + driver.Url);
//Code to open third tab.
IWebElement topNavigationCSS = driver.FindElement(By.CssSelector("div#topnav>div>div>a:nth-of-type(4)"));
topNavigationCSS.Click();
//Click the link to open third tab
IWebElement TryItYourselfLinkCSS = wait.Until<IWebElement>((d) => { return driver.FindElement(By.CssSelector("div[class='w3-example']>a[href='tryit.asp?filename=trycss_default']")); });
TryItYourselfLinkCSS.Click();
Thread.Sleep(5000); //Static Wait is not recommended
//Store all window handles in a list
allWindowHandles = driver.WindowHandles.ToList();
//Get new window handle, the one which is not equals to first two tabs.
for (int i = 0; i < allWindowHandles.Count; i++)
{
int k = 0;
for (int j = 0; j < allCapturedWindowHandles.Count; j++)
{
if (allWindowHandles[i] == allCapturedWindowHandles[j])
{
k++;
}
}
if (k == 0)
{
allCapturedWindowHandles.Add(allWindowHandles[i]);
}
}
//Switch to new window i.e. third window
driver.SwitchTo().Window(allCapturedWindowHandles[2]);
Thread.Sleep(6000); //Static Wait is not recommended
Console.WriteLine("\nSwitched to Third Tab. \nThird Tab Title: " + driver.Title);
Console.WriteLine("Third Tab URL: " + driver.Url);
//Switch to second tab
driver.SwitchTo().Window(allCapturedWindowHandles[1]);
Thread.Sleep(5000); //Static Wait is not recommended
Console.WriteLine("\nSwitched to Second Tab. \nSecond Tab Title: " + driver.Title);
Console.WriteLine("Second Tab URL: " + driver.Url);
Console.WriteLine("\nTotal Tabs: " + allCapturedWindowHandles.Count);
Console.WriteLine("All Window Handles: ");
for (int i = 0; i < allCapturedWindowHandles.Count; i++)
{
Console.WriteLine(allCapturedWindowHandles[i]);
}
}