问题描述:执行脚本时遇到最多的一个问题就是无法找到在硒元素…,除了排除页面加载时间原因外,对于初学者常犯的一个错误是,点击某个按钮跳转到新页面的问题。若在当前页面打开,给予足够的加载时间即可。但若是新窗口打开页面时,硒是不会自动识别到新窗口去查找元素的,所以需要我们去模拟人为切换到新窗口.WebDriver提供了switchTo () .window()方法可以实现在不同的窗口之间切换。
解决方案:
1。首先,确认在哪个步骤后切换窗口
在下个步骤操作前作切换。
2。封装窗口切换方法,如这里识别窗口标题来切换
封装方法如下:
,公开课WinSwitchUtil {
,,公共静态布尔switchToWindow (WebDriver博士,字符串windowTitle) {
,,,,布尔状态=false;
,,,,尝试{
,,,,,,字符串currentHandle=dr.getWindowHandle ();
,,,,,,Set
,,,,,,Iterator
,,,,,,而(it.hasNext ()) {
,,,,,,,,字符串s=it.next ();
,,,,,,,,如果(s.equals (currentHandle))
,,,,,,,,,,继续;
,,,,,,,,其他{
,,,,,,,,,,dr.switchTo () .window(年代);
,,,,,,,,,,如果(dr.getTitle () .contains (windowTitle)) {
,,,,,,,,,,,,状态=true;
,,,,,,,,,,,,System.out.println(“切换到窗口:“
,,,,,,,,,,,,,,,,+ windowTitle +“pass");
,,,,,,,,,,,,打破;
,,,,,,,,,,其他}
,,,,,,,,,,,,继续;
,,,,,,,,}
,,,,,,,}
,,,,,,}捕捉(NoSuchWindowException e) {
,,,,,,System.out.println(“窗口:“;+ windowTitle +“未找到“+ e.fillInStackTrace ());
,,,,,,状态=false;
,,,,}
,,,,返回状态;
,,}}
3。调用方法
布尔状态=switchToWindow(博士,“新窗口title");
,,,,,,如果(状态){
//在新窗口执行的任务
}
4。若实际业务中要求在新窗口中操作完成后再回到原窗口时,可再次调用该方法即可。
布尔状态=switchToWindow(博士,“原窗口title");
,,,,,,如果(状态){
//在原窗口执行的任务
}
5。以上是较简单业务时的处理方法,若是复杂业务可以通过写集合来封装好多个窗口,根据业务来选择调用。也适用于弹窗业务。