【问题标题】:Sharepoint modal window handling through Selenium webdriver通过 Selenium webdriver 处理 Sharepoint 模式窗口
【发布时间】:2012-11-22 09:55:57
【问题描述】:

我正在使用 Selenium webdriver 自动化共享点应用程序。

单击一个链接以将新项目添加到列表中时,它会打开窗口/框架(不确定),一种模态弹出窗口。执行脚本时,出现无法定位元素的错误。在下图中,当我使用driver.getwindowhandles() 查找所有窗口句柄时,它只给出了 1 个窗口作为父窗口。而不是子窗口。相同的代码能够通过 selenium IDE 运行,但不能通过 JUnit。请帮助我如何处理这件事。

driver.findElement(By.xpath("//div[@id='zz9_V4QuickLaunchMenu']/div/ul/li[4]/a/span/span")).click();
driver.findElement(By.id("idHomePageNewLink")).click();
Thread.sleep(5000);

//此时给出错误,即子弹出窗口上文本字段的id。

driver.findElement(By.id("ctl00_m_g_99918f84_a256_44b4_819e_982688a9f15c_ctl00_ctl05_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_UrlFieldUrl")).clear();        
driver.findElement(By.id("ctl00_m_g_99918f84_a256_44b4_819e_982688a9f15c_ctl00_ctl05_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_UrlFieldUrl")).sendKeys("http://efgh");
System.out.println("Done!!!!");

【问题讨论】:

  • 为了更清楚,请显示html代码sn-p?
  • 睡眠不是确保弹出窗口出现的正确方法。当您看到执行时,您是否看到模态弹出窗口?可能是弹窗在 5 秒内没有出现,因此出现错误。
  • 它显示弹出窗口,就像我们需要输入值的窗口一样。它在那里等待并给出错误。

标签: sharepoint selenium modal-dialog


【解决方案1】:

我遇到过类似的问题,我使用 Selenium webdriver 提供的SwitchTo().Frame 方法解决了这个问题。使用以下代码将焦点设置到 SharePoint 模式文件上传对话框:

driver.SwitchTo().Frame(driver.FindElement(By.ClassName("ms-dlgFrame")));

【讨论】:

    【解决方案2】:

    在 SharePoint for New item 表单中,您不需要切换窗口。由于 Selenium 将所有内容视为一页,并且自动检测代码。

    说到重点,New Item 表单窗口内部包含 IFrame,其中包含文本框/其他数据消耗对象。

    请通过切换框架尝试。新项目窗口中通常会有2个IFrame窗口...请检查新项目表单窗口的HTML代码。

    Driver.SwitchTo().Frame(1);
    Console.WriteLine(Driver.Title);
    

    一切顺利...希望这会有所帮助:-)

    【讨论】:

    • 嗨 Anurag,感谢您的回复,我已经尝试过了。但不幸的是,它不起作用,因为它没有采用该框架。它只给出主窗口的标题,而不是子窗口的标题:(