本人在学习selenium2java的时候遇到一个用例,执行完竟然有三个窗口,使用handles的办法教程只写了两个窗口的解决办法,后来我把handles全都输出出来后发现其实相当于三个窗口,再进去第三个窗口的时候,多判断一下就好了,斜面分享一下自己的经验。
1//登录下载精品资源
2 public static void downloadResources(WebDriver driver, boolean key) throws InterruptedException, AWTException {
3 if (key) {
4 loginWithTeacher(driver);
5 } else {
6 loginWithStudent(driver);
7 }
8 findElementByTextAndClick(driver, "精品资源");
9 String homehandle = driver.getWindowHandle();
10 findElementByXpathAndClick(driver, "html/body/div[3]/ul/li[4]/a");
11 Set<String> handles = driver.getWindowHandles();
12 for (String handle : handles) {
13 if (handle.equals(homehandle) == false) {
14 driver.switchTo().window(handle);
15 output("切换到精品资源页面了!");
16 Thread.sleep(2000);
17 findElementByXpathAndClick(driver, "html/body/div[5]/div[2]/div[1]/div[1]/dl/dd/a[4]");
18 findElementByXpathAndClick(driver, "html/body/div[5]/div[2]/div[1]/div[2]/dl/dd/a[3]");
19 findElementByXpathAndClick(driver, "html/body/div[5]/div[2]/div[1]/div[4]/dl/dd/a[3]");
20 Thread.sleep(2000);
21 String news = driver.getWindowHandle();
22 findElementByTextAndClick(driver, "点击下载");
23 Set<String> handlenews = driver.getWindowHandles();
24 for (String newsss : handlenews) {
25 if (newsss.equals(news) == false && newsss.equals(homehandle) == false) {
26 driver.switchTo().window(newsss);
27 output("切换到资源页面了!");
28 findElementByXpathAndClick(driver, "html/body/div[3]/div[1]/div[2]/table/tbody/tr[3]/td[5]/a");
29 Thread.sleep(500);
30 driver.switchTo().alert().accept();
31 driver.close();
32 }
33 }
34 for (String newsss : handlenews) {
35 if (newsss.equals(news)) {
36 driver.switchTo().window(newsss);
37 output("回到精品资源页面了!");
38 driver.close();
39 }
40 }
41 }
42 }
43 for (String handle : handles) {
44 if (handle.equals(homehandle)) {
45 driver.switchTo().window(handle);
46 output("回到首页了!");
47 Thread.sleep(2000);
48 driver.quit();
49 }
50 }
51 }