@Test
public void testCreateAccount() throws Exception{
//OPEN manorama online url
driver.navigate().to("http://www.manoramaonline.com/cgi-bin/MMOnline.dll/portal/ep/home.do?tabId=0&BV_ID=@@@");
// to click a link inside a slide show
while (!driver
.findElement(
By.xpath("/html/body/div[2]/div[2]/div[4]/div/div/div/div/center/div/div[2]/span/div/a/img"))
.isDisplayed()) {
}
driver.findElement(
By.xpath("/html/body/div[2]/div[2]/div[4]/div/div/div/div/center/div/div[2]/span/div/a/img"))
.click();
String newwindowTitle = driver.getTitle();
switchWindow(newwindowTitle);
}
protected static boolean switchWindow(String title) throws IOException {
String currentWindow = driver.getWindowHandle();
Set<String> availableWindows = driver.getWindowHandles();
if (!availableWindows.isEmpty()) {
for (String windowId : availableWindows) {
if (driver.switchTo().window(windowId).getTitle().equals(title)) {
return true;
} else {
driver.switchTo().window(currentWindow);
}}}
return false;
}
#1 楼
一个可能更简单的解决方案是:driver.SwitchTo().Window(driver.WindowHandles.Last());
。Last()只会切换到最近打开的窗口,该窗口应该是您打开时刚刚打开的窗口。点击了链接。
#2 楼
我认为您可能在switchWindow方法中使问题复杂化了。如果我对您的理解正确,那么您要做的就是遍历打开的窗口,比较每个窗口的标题,如果正确,则返回true。
C#示例
protected static Boolean SwitchWindow(string title)
{
var currentWindow = driver.CurrentWindowHandle;
var availableWindows = new List<string>(driver.WindowHandles);
foreach (string w in availableWindows)
{
if (w != currentWindow)
{
driver.SwitchTo().Window(w);
if (driver.Title == title)
return true;
else
{
driver.SwitchTo().Window(currentWindow);
}
}
}
return false;
}
#3 楼
如果只有URL,这可能是一个有用的解决方案: public void SwitchTo(string prefix)
{
var handlers = driver.WindowHandles;
foreach (var handler in handlers)
{
driver.SwitchTo().Window(handler);
if (driver.Url.Contains(prefix)) return;
}
}
#4 楼
对于某些浏览器,碰巧一旦执行了鼠标悬停操作,但是在Selenium确定下一个子菜单项之前,菜单列表会很快消失。在这种情况下,最好在主菜单上使用perform()
操作来保存菜单列表,直到Selenium确定子菜单项并单击它为止。此处
WebElement xWL = driver.findElement(By.xpath("x path text"));
Actions xAct = new Actions(driver);
代替此:
xAct.moveToElement(xWL).build().perform();
下面的代码将解决“元素不可见”的问题
xAct.moveToElement(xWL);
xAct.click();
xAct.perform();
#5 楼
使用Ruby和Watir-webdriver,您只需要使用此代码browser.windows.last.use
,这会将焦点设置为新打开或最后打开的选项卡或窗口, >在使用完新标签页/窗口后,只需使用它来关闭该标签页/窗口
browser.windows.last.close
或者如果您想切换回上一个标签页/窗口,您将可以通过
:title, :url, or :index.
browser.window(:index => 1).use
browser.window(:url => /closeable\.html/).use
browser.window(:title => "closeable window").use
查找窗口
评论
您假设页面标题不同/唯一。您的应用程式正确吗?