【问题标题】:Cannot handle Sharepoint pop-up page in Selenium Webdriver无法处理 Selenium Webdriver 中的 Sharepoint 弹出页面
【发布时间】:2016-07-04 16:01:39
【问题描述】:

我正在尝试使用 Selenium Webdriver 自动化 Sharepoint 站点,但无法让我的代码识别新弹出窗口中的元素。

场景如下;在脚本中的某个位置,我们单击指向新布告栏项目的链接。将鼠标悬停在它上面会给我指针Javascript:OpenPopUpPage('/Lists/Noticeboard/NoticeboardNewFormMain.aspx')。单击链接时,会出现弹出窗口,并且父屏幕按预期禁用。

此时脚本会尝试识别弹出窗口中的第一个元素:

    try{
        element = driver.findElement(By.xpath("/html/body/form/div[4]/div[1]/div/div[1]/div[2]/div[2]/div[2]/table/tbody/tr/td/div/div/div/div/div[1]/span[1]/table/tbody/tr[2]/td/div[1]/div[3]/span[1]/input"));
    }catch(Exception e){
        Log.error(sRepositoryName + " | txt_Title not found | Exception desc : "+e.getMessage());       
    } 
    return element;

我已经使用 Firebug 检查了 xpath,这对于弹出窗口中的第一个对象是正确的。通过 xpath 我可以看到没有指定 iFrame,因此尝试 driver.switchTo().frame(1) 没有用。

我也尝试过使用driver.getwindowhandles(),但这只会返回一个窗口,所以没有什么可以切换的。

最后,我看到其他人认为这可能只是时间问题,因为在脚本检查它们时尚未创建弹出表单上的元素,所以我尝试使用Thread.sleep(15000) 为弹出窗口留出时间生成,但没有成功。

无论我尝试什么,对于弹出窗口中的所有元素,我仍然会遇到“无法定位元素”异常。有谁知道如何处理这些弹出窗口?

【问题讨论】:

    标签: java selenium sharepoint selenium-webdriver popup


    【解决方案1】:

    弹出窗口正在更改 DOM,但您在更改生效之前进行查询。

    您需要为此使用 Selenium 的隐式等待机制:

    http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

    【讨论】:

    • 我也试过这个。在我的 try...catch 语句之前设置 driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 仍然得到“无法定位元素”异常。还尝试在驱动程序初始化后直接设置隐式等待,但仍然没有运气。
    【解决方案2】:

    看来我找到了解决办法。

    当弹出窗口打开时,它不会打开新框架,但似乎失去了对现有框架的关注。在尝试访问弹出窗口之前,我尝试了driver.switchTo().frame(0),这很有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多