在进行自动化操作时,任何人都可以帮助我在使用selenium点击超链接后切换到新窗口。我尝试了以下代码,但我的测试用例失败了:
public void openView(){
final WebElement visa=driver.findElement(By.id("pageContainer"));
timeOut(10000);
final List<WebElement> images=visa.findElements(By.className("nametag"));
String handlewindow = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}
images.get(0).findElement(By.className("info")).findElement(By.tagName("a")).click();;
答案 0 :(得分:0)
我们正在使用的(Java):
public void switchToLatestPopupWindow()
{
Iterator<String> handleIterator = this.driver.getWindowHandles().iterator();
while (handleIterator.hasNext())
{
String handle = handleIterator.next();
if (!handleIterator.hasNext())
{
this.driver.switchTo().window(handle);
}
}
}
public void resetToMainWindow()
{
Iterator<String> handleIterator = this.driver.getWindowHandles().iterator();
String parentHandle = null;
while (handleIterator.hasNext())
{
String handle = handleIterator.next();
if (parentHandle == null)
{
parentHandle = handle;
} else if (!parentHandle.equals(handle))
{
this.driver.switchTo().window(handle);
this.driver.close();
}
}
this.driver.switchTo().window(parentHandle);
}
答案 1 :(得分:0)
假设最后一行代码:
images.get(0).findElement(By.className("info")).findElement(By.tagName("a")).click()
打开一个新窗口,在click()之后打开子窗口之前,您将获取父窗口的窗口句柄。
其次,这是切换到子窗口的代码:
String handlewindow = driver.getWindowHandles().toArray()[1];
driver.switchTo().window(handlewindow);
解释是driver.getWindowHandles()返回一组所有打开的窗口句柄。将Set转换为数组并在索引1处获取元素,因为子窗口为1,父窗口为0。
答案 2 :(得分:0)
使用从Stackoverflow上的另一个线程中获取的代码...
WebElement link = driver.findElement(By.linkText("<your link text>"));
Actions newwin = new Actions(driver);
newwin.keyDown(Keys.CONTROL).click(link).keyUp(Keys.CONTROL).build().perform();
我检查了这个,然后在新标签页中打开链接。然后使用此代码切换到新选项卡...
String handlewindow = driver.getWindowHandles().toArray()[1];
driver.switchTo().window(handlewindow);
答案 3 :(得分:0)
在for循环中,我们需要检查当前窗口句柄是否不等于循环提取的句柄
String handlewindow = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles()){
if (! handlewindow.equals (winHandle))
driver.switchTo().window(winHandle);
}
答案 4 :(得分:0)
Actions ac = Actions(driverObj);
String parentHandle = driverObj.getWindowHandle();
WebElement we = driverObj.findElement(By.xpath("here is your xpath"));
ac.keyDown(Keys.CONTROL).click(we).keyUp(Keys.CONTROL).build().perform();
String currentHandle ="";
Set<String> win = ts.getDriver().getWindowHandles();
Iterator<String> it = win.iterator();
if(win.size() > 1){
while(it.hasNext()){
String handle = it.next();
if (!handle.equalsIgnoreCase(parentHandle)){
ts.getDriver().switchTo().window(handle);
currentHandle = handle;
}
}
}
else{
System.out.println("Unable to switch");
}
使用上面的代码,您可以打开新标签中的任何链接..
答案 5 :(得分:0)
要在选项卡之间切换,可以使用以下方法:
public void switchToNextTab() {
ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(tab.get(1));
}
public void switchToPreviousTab() {
ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(tab.get(0));
}