无法在Selenium Webdriver

时间:2016-05-03 08:40:38

标签: java selenium sharepoint selenium-webdriver popup

我正在尝试使用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)给出时间要生成的弹出窗口,但没有成功。

无论我尝试什么,我仍然会在弹出窗口中找到所有元素的“无法定位元素”异常。有没有人有任何想法如何处理这些弹出窗口?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

似乎我找到了解决方案。

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