页面上有个table,table中每一行里可能会有一个链接,打开这个链接,获取链接页面数据后关闭页面,回到table:
private static void opennewpage(WebElement table, String name, WebDriver webDriver, Map cookies) {
List<WebElement> trs = table.findElements(By.tagName("tr"));
for (int i = 1; i < trs.size(); i++) {
String id = trs.get(i).findElements(By.tagName("td")).get(0).getText();
List<WebElement> links = trs.get(i).findElements(By.tagName("a"));
for (WebElement link : links) {
WebDriver detailWindow =SeleniumOpenNew.opennewpage(link.getAttribute("href"), webDriver, cookies);//打开新页面
try{
WebElement tables = detailWindow.findElement(By.tagName("form"));//你需要的数据table所在的标签
//TODO:获取tables里面的数据
}catch(Exception ex){//新页面有可能打开不成功或者新的页面获取不到名字为form的标签
System.out.println("error:"+id);
}
detailWindow.close();//关闭新开的页面
handles = new ArrayList<String>(webDriver.getWindowHandles());
webDriver.switchTo().window(handles.get(handles.size() - 1));//新的页面已经关闭,所以最后一个句柄就是之前那个table的窗口
webDriver.switchTo().defaultContent();
for (WebElement frames : webDriver.findElements(By.tagName("frame"))) {
if ("main".equals(frames.getAttribute("name"))) {
webDriver.switchTo().frame("main");//进入table所在的那个frame,这样循环回去的时候才能取到值
}
}
}
}
}
SeleniumOpenNew.opennewpage代码
public static WebDriver opennewpage(String url, WebDriver webDriver, Map cookies){
for (Object entry : cookies.keySet()) {
Cookie cookie = new Cookie(entry + "", cookies.get(entry) + "");
webDriver.manage().addCookie(cookie);
}
JavascriptExecutor executor = (JavascriptExecutor) webDriver;
executor.executeScript("window.open('" + url + "')");//打开新窗口
List<String> handles = new ArrayList<String>(webDriver.getWindowHandles());//获取所有窗口句柄
WebDriver newdriver=webDriver.switchTo().window(handles.get(handles.size()-1)); //切换到最后一个窗口,就是新打开的那个页面
return newdriver;
}