我为窗口处理编写了一个函数,但它在selenium webdriver中不起作用

时间:2017-03-25 18:07:01

标签: selenium webdriver

我正在研究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();

3 个答案:

答案 0 :(得分:0)

在代码中进行以下更改:

  1. 更改为: dObj.switchTo()窗口(windowhanldval);

  2. 减少“arg_title”的实际字符串,就像在getTitle()

  3. 获取的字符串中查找整个字符串一样
  4. 当您已经在该页面上尝试匹配页面标题时,这意味着焦点已经在我们需要找到Login按钮元素的实际页面上。因此,完全删除第二个开关()行。而是使用“break”来循环。

  5. 如果这些步骤适合您,请告诉我。

答案 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());
    }