和我一起学 Selenium WebDriver(5)——基础篇

前面的学习已经让我们可以轻松的运行js、点击节点,下面该学习如何控制 alert、confirm 和 弹出窗口这些了


【1、如何处理 confirm 和 alert】 

处理 confirm、alert 其实很简单,只需要利用 WebDriver 的 switchTo().alert() 方法就可以轻松切换到 alert 对象 Alert,进行控制。

我们直接利用 高级增删改查 的Demo 测试 alert 和 confirm,顺便还使用 sendKeys 进行文字录入的操作


Java代码   收藏代码
  1. package lesson5;  
  2.   
  3. import static org.junit.Assert.*;  
  4.   
  5. import org.junit.AfterClass;  
  6. import org.junit.BeforeClass;  
  7. import org.junit.Test;  
  8. import org.openqa.selenium.Alert;  
  9. import org.openqa.selenium.JavascriptExecutor;  
  10. import org.openqa.selenium.Keys;  
  11. import org.openqa.selenium.WebDriver;  
  12. import org.openqa.selenium.WebElement;  
  13. import org.openqa.selenium.firefox.FirefoxDriver;  
  14. import org.openqa.selenium.support.ui.ExpectedCondition;  
  15. import org.openqa.selenium.support.ui.WebDriverWait;  
  16.   
  17. public class ExampleForAlert  {  
  18.       
  19.     static WebDriver driver;  
  20.       
  21.     @BeforeClass  
  22.     public static void init() {  
  23.         System.out.println("init...");  
  24.         // 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置  
  25.         System.setProperty("webdriver.firefox.bin""D:\\Program Files\\Mozilla Firefox\\firefox.exe");  
  26.         // 创建一个 FireFox 的浏览器实例  
  27.         driver = new FirefoxDriver();  
  28.     }  
  29.       
  30.     @Test  
  31.     public void test() {  
  32.         // 让浏览器访问 zTree Demo  
  33.         driver.get("http://www.ztree.me/v3/demo/cn/exedit/edit_super.html");  
  34.           
  35.         // 等待 zTree 初始化完毕,Timeout 设置10秒  
  36.         try {  
  37.             (new WebDriverWait(driver, 10500)).until(new ExpectedCondition<Boolean>() {  
  38.                 public Boolean apply(WebDriver d) {  
  39.                     WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#treeDemo li').get(0);");  
  40.                     return element != null;  
  41.                 }  
  42.             });  
  43.               
  44.         } catch(Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.           
  48.         ((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"  
  49.                 + "window.zTreeNode = window.zTreeObj.getNodes()[0];"  
  50.                 + "window.zTreeObj.selectNode(window.zTreeNode);");  
  51.           
  52.         //点击编辑按钮,弹出 confirm  
  53.         WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_edit').get(0);");  
  54.         element.click();  
  55.           
  56.         //第一次点击取消  
  57.         Alert alert = driver.switchTo().alert();  
  58.         System.out.println(alert.getText());  
  59.         alert.dismiss();  
  60.         element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_input').get(0);");  
  61.         assertNull(element);  
  62.           
  63.         //点击编辑按钮,弹出 confirm  
  64.         element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_edit').get(0);");  
  65.         element.click();  
  66.           
  67.         //第二次点击确定  
  68.         alert = driver.switchTo().alert();  
  69.         alert.accept();  
  70.         element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_input').get(0);");  
  71.         assertNotNull(element);  
  72.           
  73.         //修改name  
  74.         for (int i=0, j=element.getAttribute("value").length(); i<j; i++) {  
  75.             element.sendKeys(Keys.BACK_SPACE);  
  76.         }  
  77.         element.sendKeys(Keys.RETURN);  
  78.           
  79.         //确定 提示信息  
  80.         alert = driver.switchTo().alert();  
  81.         alert.accept();  
  82.           
  83.         //修改name  
  84.         element.sendKeys("test");  
  85.         element.sendKeys(Keys.RETURN);  
  86.         String newName = (String) ((JavascriptExecutor)driver).executeScript("return window.zTreeNode.name");  
  87.         assertEquals(newName, "test");  
  88.           
  89.     }  
  90.       
  91.     @AfterClass  
  92.     public static void destory() {  
  93.         System.out.println("destory...");  
  94.         //关闭浏览器  
  95.         driver.quit();  
  96.     }  
  97. }  

【2、如何处理 弹出页面】

弹出窗口的捕获,同样需要利用 switchTo 方法,这里面需要注意的是——新弹出窗口后,还是要稍微等待一下;如果不等待一会儿,直接获取新窗口的 url 你会得到 about:blank 这样的结果


Java代码   收藏代码
  1. package lesson5;  
  2.   
  3.   
  4. import java.util.Iterator;  
  5. import java.util.Set;  
  6.   
  7. import org.junit.AfterClass;  
  8. import org.junit.BeforeClass;  
  9. import org.junit.Test;  
  10. import org.openqa.selenium.JavascriptExecutor;  
  11. import org.openqa.selenium.WebDriver;  
  12. import org.openqa.selenium.WebElement;  
  13. import org.openqa.selenium.firefox.FirefoxDriver;  
  14. import org.openqa.selenium.support.ui.ExpectedCondition;  
  15. import org.openqa.selenium.support.ui.WebDriverWait;  
  16.   
  17. public class ExampleForNewWindow  {  
  18.       
  19.     static WebDriver driver;  
  20.       
  21.     @BeforeClass  
  22.     public static void init() {  
  23.         System.out.println("init...");  
  24.         // 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置  
  25.         System.setProperty("webdriver.firefox.bin""D:\\Program Files\\Mozilla Firefox\\firefox.exe");  
  26.         // 创建一个 FireFox 的浏览器实例  
  27.         driver = new FirefoxDriver();  
  28.     }  
  29.       
  30.     @Test  
  31.     public void test() {  
  32.         // 让浏览器访问 zTree Demo  
  33.         driver.get("http://www.ztree.me/v3/demo/cn/core/url.html");  
  34.           
  35.         // 等待 zTree 初始化完毕,Timeout 设置10秒  
  36.         try {  
  37.             (new WebDriverWait(driver, 10500)).until(new ExpectedCondition<Boolean>() {  
  38.                 public Boolean apply(WebDriver d) {  
  39.                     WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#treeDemo li').get(0);");  
  40.                     return element != null;  
  41.                 }  
  42.             });  
  43.               
  44.         } catch(Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.           
  48.         ((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"  
  49.                 + "window.zTreeNode = window.zTreeObj.getNodes()[0];");  
  50.           
  51.         //点击第一个节点,弹出 zTree 官网  
  52.         WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_a').get(0);");  
  53.         element.click();  
  54.           
  55.         //等待5秒,确保新页面加载完毕  
  56.         try {  
  57.             (new WebDriverWait(driver, 51000)).until(new ExpectedCondition<Boolean>() {  
  58.                 public Boolean apply(WebDriver d) {  
  59.                     return false;  
  60.                 }  
  61.             });  
  62.               
  63.         } catch(Exception e) {}  
  64.   
  65.         //当前窗口的 Handle  
  66.         String curWindow = driver.getWindowHandle();  
  67.         //全部窗口的 Handle 集合  
  68.         Set<String> wins = driver.getWindowHandles();  
  69.         Iterator<String> itWin = wins.iterator();  
  70.         while(itWin.hasNext()) {  
  71.             String key = itWin.next();  
  72.             if (curWindow.equals(key)) {  
  73.                 continue;  
  74.             }  
  75.             WebDriver newDriver = driver.switchTo().window(key);  
  76.             System.out.println("new Window: " + newDriver.getCurrentUrl());  
  77.         }  
  78.           
  79.     }  
  80.       
  81.     @AfterClass  
  82.     public static void destory() {  
  83.         System.out.println("destory...");  
  84.         //关闭浏览器  
  85.         driver.quit();  
  86.     }  
  87. }  
 

【3、另一种切换到 iframe 的方法】

今天主要接触了 switchTo 方法,使用这个方法,就可以直接切换到 iframe 窗口内,切换后使用js 时就可以把 iframe 当做当前的主窗口来使用了


Java代码   收藏代码
  1. package lesson5;  
  2.   
  3. import org.junit.AfterClass;  
  4. import org.junit.BeforeClass;  
  5. import org.junit.Test;  
  6. import org.openqa.selenium.JavascriptExecutor;  
  7. import org.openqa.selenium.WebDriver;  
  8. import org.openqa.selenium.firefox.FirefoxDriver;  
  9. import org.openqa.selenium.support.ui.ExpectedCondition;  
  10. import org.openqa.selenium.support.ui.WebDriverWait;  
  11.   
  12. public class ExampleForIframe2  {  
  13.       
  14.     static WebDriver driver;  
  15.       
  16.     @BeforeClass  
  17.     public static void init() {  
  18.         System.out.println("init...");  
  19.         // 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置  
  20.         System.setProperty("webdriver.firefox.bin""D:\\Program Files\\Mozilla Firefox\\firefox.exe");  
  21.         // 创建一个 FireFox 的浏览器实例  
  22.         driver = new FirefoxDriver();  
  23.     }  
  24.       
  25.     @Test  
  26.     public void test() {  
  27.         // 让浏览器访问 zTree Demo  
  28.         driver.get("http://www.ztree.me/v3/demo.php#_102");  
  29.           
  30.         // 等待 iframe 加载完毕,Timeout 设置10秒  
  31.         try {  
  32.             (new WebDriverWait(driver, 10500)).until(new ExpectedCondition<Boolean>() {  
  33.                 public Boolean apply(WebDriver d) {  
  34.                     Boolean loaded = (Boolean) ((JavascriptExecutor)driver).executeScript("return !!demoIframe.$.fn.zTree.getZTreeObj('treeDemo');");  
  35.                     return loaded;  
  36.                 }  
  37.             });  
  38.               
  39.         } catch(Exception e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.         driver.switchTo().frame("demoIframe");  
  44.           
  45.         ((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');");  
  46.           
  47.         //利用 expandNode 方法展开第2个根节点  
  48.         ((JavascriptExecutor)driver).executeScript("window.zTreeNode = window.zTreeObj.getNodes()[1]; window.zTreeObj.expandNode(window.zTreeNode, true);");  
  49.           
  50.         // 等待 5 秒  
  51.         try {  
  52.             (new WebDriverWait(driver, 51000)).until(new ExpectedCondition<Boolean>() {  
  53.                 public Boolean apply(WebDriver d) {  
  54.                     return false;  
  55.                 }  
  56.             });  
  57.               
  58.         } catch(Exception e) {}  
  59.           
  60.     }  
  61.       
  62.     @AfterClass  
  63.     public static void destory() {  
  64.         System.out.println("destory...");  
  65.         //关闭浏览器  
  66.         driver.quit();  
  67.     }  
  68. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值