更改控件后,无法在新窗口中打开的列表中执行任何操作

时间:2014-05-28 13:14:08

标签: java selenium webdriver

更改控件后,无法在新窗口中打开的列表中执行任何操作。 点击<img>打开值列表后,我有一个父窗口,带有新窗口的列表。我已使用下面的代码将控件更改为新窗口     for(String handle:driver.getWindowHandles()){         driver.switchTo()窗口(手柄)。     }     driver.findElement(By.cssSelector(&#34; [ID =&#39; dynshlp_sel_2-ROWSEL&#39;]&#34));

之后我无法做任何事情。我需要点击dynshlp_sel_2-rowsel。但 除非我关闭新窗口,否则程序不会单击该元素,也不会显示任何错误。

在关闭新窗口后,发出错误声明无法找到该元素。

我是此网站的新用户,我不知道如何为此问题添加屏幕截图。

HTML CODE:

    <td id="dynshlp_sel_2" class="th-clr-nsel th-clr-cel">
        <div style="text-align:center;">
            <a id="dynshlp_sel_2-rowsel" class="th-lk" title="Select table row" href="javascript:void(0);" onfocus="thtmlbSaveKeyboardFocus('dynshlp_sel_2-rowsel');"></a>
        </div>
    </td>
    <td class="th-clr-cel th-clr-pad th-clr-cel-dis th-clr-cel-first-col" style="width:000056%; 

我的代码: String mwh = driver.getWindowHandle();         driver.findElement(By.cssSelector(&#34; a [id =&#39; C20_W57_V58_V59_V60_marketing_struct.classific-btn&#39;]&gt; img:nth-​​child(1)&#34;))。click();         //上面的点击将打开一个弹出窗口         的System.out.println(driver.getWindowHandles()大小());         设置s = driver.getWindowHandles();

    //this method will gives you the handles of all opened windows
    Iterator ite=s.iterator();

    while(ite.hasNext())
    {
        String popupHandle=ite.next().toString();
        if(!popupHandle.contains(mwh))
        {
                    driver.switchTo().window(popupHandle);
                    driver.findElement(By.cssSelector("a[id='dynshlp_sel_2-rowsel']"));
                    //**here you can perform operation in pop-up window**
                    //After finished your operation in pop-up just select the main window again

                    driver.switchTo().window(mwh);
        }
    }

2 个答案:

答案 0 :(得分:0)

从附加的代码中,我可以看到Onfocus事件被触发。

要处理这些事情,

  1. 尝试模拟鼠标事件
  2. 检查元素是否在&#34; Frame&#34;
  3. 请发布有助于调试的错误日志。

    此致

答案 1 :(得分:0)

用于将控件切换为弹出窗口的代码是错误的。

请参阅以下主题以了解如何将控件切换到新窗口。

How can selenium web driver get to know when the new window has opened and then resume its execution

请参阅this blog post以了解有关弹出窗口处理的更多信息。

EDIT-I

String mwh=driver.getWindowHandle();
<<<<<<  Click on Button which leads to open a new window  >>>>>
Set s=driver.getWindowHandles();

//this method will gives you the handles of all opened windows
Iterator ite=s.iterator();

while(ite.hasNext())
{
    String popupHandle=ite.next().toString();
    if(!popupHandle.contains(mwh))
    {
                driver.switchTo().window(popupHandle);

                //**here you can perform operation in pop-up window**
                //After finished your operation in pop-up just select the main window again

                driver.switchTo().window(mwh);
    }
}