應用場景:
對於web端接收手機驗證碼的處理方法:
1、如果有權限可以通過查詢數據庫來獲得手機驗證碼,方便快捷。
2、如果后台系統保存了手機驗證碼,可以去后台獲取驗證碼,然后填寫到前台頁面,此方法有兩種處理方法
2.1 在前台發送驗證碼的頁面,直接通過dr.get("http://www.xxx.com");切換頁面到后台,查詢驗證碼並保存下來,再通過
dr.get("http://www.xxx.com");方法切換到前台發送驗證碼頁面,充填之前填寫信息,此時不點擊發送手機驗證碼,直接輸入上次發送的手機驗證碼
2.2 可通過js以及切換頁面來實現,具體操作如下:
通過js給發送驗證碼的按鈕新增onclick()事件,onclick()事件可通過window.open("http://www.baidu.com");方法給按鈕新增重新打開一頁面方法,通過該方法在當前頁面后面新打開一個頁面(此時是打開后台地址)
在第二個頁面獲得驗證碼,此時關閉第二個頁面,返回第一個頁面輸入驗證碼,完成操作
主要對2.2 的方法進行詳細說明
對發送驗證碼按鈕新增onclick事件:
JavascriptExecutor js = (JavascriptExecutor)dr;
WebElement e = driver.findElement(By.xpath(".//*[@id='lg']/img"));
js.executeScript("arguments[0].onclick=function(){window.open('http://t0.gomemyc.com:8080/admin/message/listAll')}",e);
切換到第二個頁面方法
//頁面跳轉到第二第三窗口
public void getHandle(WebDriver driver) {
try {
Thread.sleep(1500);
String currentWindow = driver.getWindowHandle(); //獲取當前窗口句柄
System.out.println("當前:"+currentWindow);
Thread.sleep(3000);
Set<String> handles = driver.getWindowHandles(); //獲取最新窗口句柄
Iterator<String> it = handles.iterator();
while(it.hasNext()){
String next = it.next();
if(currentWindow.equals(next))
{
System.out.println("第一次跳轉:"+next);
continue;
}
WebDriver window = driver.switchTo().window(next);
// aa = true;
System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
}
System.out.println("跳轉結束");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (NoSuchElementException ee) {
// TODO Auto-generated catch block
ee.printStackTrace();
}catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
切換到第二個頁面后,再獲得驗證碼信息,此時再關閉第二個頁面,跳轉到第一個頁面
//此方法是將頁面跳轉到第一個窗口
public void getHandle2(WebDriver driver) {
try {
Thread.sleep(4000);
String currentWindow = driver.getWindowHandle(); //得到當前窗口句柄
System.out.println(driver.getCurrentUrl());
System.out.println("當前:"+currentWindow);
Thread.sleep(1900);
Set<String> handles = driver.getWindowHandles(); //得到所有窗口句柄
Iterator<String> it = handles.iterator();
String next = it.next(); //此處是第一個窗口句柄
System.out.println("第一個窗口句柄:"+next);
WebDriver window = driver.switchTo().window(it.next()); //跳轉第二個窗口
Thread.sleep(1900);
window.close(); //關閉第二個窗口
Thread.sleep(1900);
window = driver.switchTo().window(next); //此處跳轉到第一個窗口
System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
System.out.println("跳轉結束");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (NoSuchElementException ee) {
// TODO Auto-generated catch block
ee.printStackTrace();
}catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}