51Testing软件测试论坛

标题: 新人求助:selenium ide 自动运行脚本到一个节点失败终止,然后手动运行却是正常的 [打印本页]

作者: tf303995    时间: 2015-8-21 14:47
标题: 新人求助:selenium ide 自动运行脚本到一个节点失败终止,然后手动运行却是正常的
代码如下:<tr>
    <td>click</td>
    <td>xpath=(//a[contains(text(),'处理')])[2]</td>
    <td></td>
</tr>
<tr>
    <td>waitForPopUp</td>
    <td></td>
    <td>30000</td>
</tr>
<tr>
    <td>clickAt</td>
    <td>xpath=html/body/div[2]/div[2]/div/div[1]/div/div[4]/table/tbody/tr[1]/td[1]</td>
    <td></td>

我希望的操作是点击“处理”按钮后进入一个处理界面,然后鼠标选取xpath=html/body/div[2]/div[2]/div/div[1]/div/div[4]/table/tbody/tr[1]/td[1]的地方然后再进行下一步操作。但是在运行脚本的时候每到这里都是提示
然后脚本停止,这时如果手动点击运行失败的这个脚本马上就成功。不是延迟之类的问题,我试过在这个操作前加入了pause  10000。依然运行脚本时在这里会失败,马上失败马上手动再运行一次就依然是成功的,期待高手解答


作者: krush008    时间: 2015-8-21 15:08
用IDE录制,很多会不成功。 与其用录制方式获得脚本节约时间,不如好好自己编写脚本, 可能会更节约时间。

开始回答问题。
waitForPopUp  看来是弹出了一个页面。
对于弹出的页面,需要去获取,要不然还在原来页面,当然找不到xpath=html/body/div[2]/div[2]/div/div[1]/div/div[4]/table/tbody/tr[1]/td[1] 这个元素。

至于如何修改录制的脚本,我没有经验。
自己编写脚本,是根据窗口句柄或者窗口标题。


String currentWindow = webtest.wd.getWindowHandle();//获取当前窗口句柄
        Set<String> handles = webtest.wd.getWindowHandles();//获取所有窗口句柄
        Iterator<String> it = handles.iterator();
        
        while (it.hasNext())
        {               
                if (currentWindow == it.next())
                {
                        continue;
                }
                webtest.wd.switchTo().window(it.next());//切换到新窗口
                webtest.wd.manage().window().maximize();  //窗口最大化
                //System.out.println(webtest.wd.getCurrentUrl());               
        }
作者: krush008    时间: 2015-8-21 15:48
对了,上面这个代码不够严谨, 不知道有人看出来没有?
上面的代码,是仅有一个主窗口,再弹出一个, 总共2个窗口的情况下。
要严谨的话,还需根据 title 、url等去匹配需要找的窗口。
作者: krush008    时间: 2015-8-21 16:04
比如我目前的窗口A    URL是: http://www.test.com/
这里有一条记录,点击之后到新的窗口B,URL是: http://www.test.com/index.html#msg/detail?event_id=148
我要去窗口B操作,定位窗口过程::


        Set<String> handles = webtest.wd.getWindowHandles();//获取所有窗口句柄
        Iterator<String> it = handles.iterator();
        
        while (it.hasNext())
        {
                String handle=it.next();
                webtest.wd.switchTo().window(handle);
                String url=webtest.wd.getCurrentUrl();
                String idUrl="detail?event_id="+eventID;
                if (url.contains(idUrl))
                {
                        webtest.wd.manage().window().maximize();
                        break;
                }
        }




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2