我正在研究Selenium webdriver,我已经编写了一个窗口处理函数。我已经为naukri.com popup处理编写了代码。我的方案是打开naukri.com而不关闭弹出窗口。我想切换主窗口并单击Login按钮。我已编写代码并创建了一个函数。当我运行脚本时焦点位于主页面上,网址显示为已选中,但我无法单击“登录”按钮。我不明白问题出在哪里。请建议我。
public static WebDriver fn_SetFocus_According_Title(WebDriver dObj, String arg_title)
{
Set<String> setcol_windowHandle=dObj.getWindowHandles();
Iterator<String>itcol_handleval=setcol_windowHandle.iterator();
while(itcol_handleval.hasNext()==true){
String windowhanldval=itcol_handleval.next();
dObj=dObj.switchTo().window(windowhanldval);
String apptitle=dObj.getTitle();
if(apptitle.contains(arg_title))
{
dObj=dObj.switchTo().window(arg_title);
}
}
return dObj;
}
}
WebDriver dObj = new FirefoxDriver();
dObj.manage().window().maximize();
dObj.get("https://www.naukri.com");
dObj.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
dObj=fn_SetFocus_According_Title(dObj,"Jobs - Recruitment - Job Search - Employment - Job Vacancies - Naukri.com");
dObj.findElement(By.xpath("//a[@id='login_Layer']")).click();
答案 0 :(得分:0)
在代码中进行以下更改:
更改为: dObj.switchTo()窗口(windowhanldval);
减少“arg_title”的实际字符串,就像在getTitle()
当您已经在该页面上尝试匹配页面标题时,这意味着焦点已经在我们需要找到Login按钮元素的实际页面上。因此,完全删除第二个开关()行。而是使用“break”来循环。
如果这些步骤适合您,请告诉我。
答案 1 :(得分:0)
以下功能对我有用。
public static void switchToWindow(String windowTitle)
{
for (String window : driver.getWindowHandles())
{
driver.switchTo().window(window);
if (driver.getTitle().equals(windowTitle))
{
return;
}
}
throw new InvalidParameterException("The window titled <" + windowTitle + "> does not exist.");
}
您可能遇到的一个问题是,当创建新的标签/窗口时,您可能需要等待它出现。为此,您可以使用类似
的内容int count = driver.getWindowHandles().size() + 1; // add 1 to the current window count
// do something that spawns a new window
new WebDriverWait(driver, 3).until(ExpectedConditions.numberOfWindowsToBe(count));
您不需要返回WebDriver
个实例。它与您已经使用的驱动程序实例相同。如果找不到预期的窗口标题,该函数将抛出异常。
答案 2 :(得分:0)
希望这对你有用。
public void Parenthandle(WebDriver wb){
try {
String ParentPageHandle = wb.getWindowHandle();
for (String newPage : wb.getWindowHandles()) {
if (!ParentPageHandle.equals(newPage)) {
wb.switchTo().window(newPage);
}
}
} catch (Exception e) {
System.err.println(e.getMessage());
}