5.6 WebDriver API实例讲解(16-30)
16.操作单选框
被测试的网页为Demo1。
Java语言版本的API实例代码:
public static void operateRadio(){ driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html"); driver.manage().window().maximize(); WebElement radioOption=driver.findElement(By.xpath("//input[@value='Volvo']")); if(!radioOption.isSelected()) radioOption.click(); sleep(3000); List<WebElement> cars=driver.findElements(By.name("identity")); for(WebElement car:cars) if(car.getAttribute("value").equals("Audi")){ if(!car.isSelected()) car.click(); break; } }
17.操作复选框
被测试的网页为Demo1。
Java语言版本的API实例代码:
public static void operateCheckBox(){ driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html"); driver.manage().window().maximize(); sleep(2000); WebElement element=driver.findElement(By.xpath(".//*[@id='checkbox']/input[3]")); if(!element.isSelected()) element.click(); sleep(2000); if(element.isSelected()) element.click(); sleep(2000); System.out.println("end1"); List<WebElement> checkboxs=driver.findElements(By.xpath(".//*[@id='checkbox']/input")); for(WebElement checkbox:checkboxs) checkbox.click(); System.out.println("end2"); }
18.杀掉Windows的浏览器进程
测试前准备条件:
(1)打开一个Firefox浏览器
(2)打开一个IE浏览器
(3)打开一个Chrome浏览器
Java语言版本的API实例代码:
public static void operateWindowsProcess(){ WindowsUtils.KillByName("firefox.exe"); sleep(2000); WindowsUtils.KillByName("iexplore.exe"); sleep(2000); WindowsUtils.KillByName("chrome.exe"); sleep(2000); }
19.将当前浏览器的窗口截屏
public static void captureScreenInCurrentWindow(){ driver.get("http://www.sogou.com"); File scrFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try{ FileUtils.copyFile(scrFile, new File("d:\\test.png")); }catch(IOException e){ e.printStackTrace(); } }
20.执行JavaScript脚本
被测试的网页为http://www.sogou.com。
Java语言版本的API实例代码:
public static void executeJavaScript(){ driver.get("http://www.sogou.com"); //声明一个JavaScript执行器对象 JavascriptExecutor js=(JavascriptExecutor)driver; //调用执行器对象的executeScript方法来执行JavaScript脚本返回当前浏览器窗口的 Title值 String title=(String)js.executeScript("return document.title"); System.out.println(title); }
21.拖拽页面元素
被测试网页的网址:http://jqueryui.com/resources/demos/draggable/scroll.html
此页面的3个方框元素可以被拖动。
Java语言版本的API实例代码:
public static void dragPageElement(){ driver.get("http://jqueryui.com/resources/demos/draggable/scroll.html"); WebElement draggable=driver.findElement(By.id("draggable")); //向下拖动10个像素,共拖动5次 for(int i=0;i<5;i++){ //10表示元素的纵坐标向下移动10个像素,0表示元素的横坐标不变 new Actions(driver).dragAndDropBy(draggable, 0, 10).build().perform(); } sleep(2000); //向右拖动10个像素,共拖动5次 for(int i=0;i<5;i++){ new Actions(driver).dragAndDropBy(draggable, 10, 0).build().perform(); } }
22.模拟键盘的操作
被测试网页的网址:http://www.sogou.com。
Java语言版本的API实例代码:
public static void clickKeys(){ driver.get("http://www.sogou.com/"); WebElement element=driver.findElement(By.id("query")); element.click(); Actions action=new Actions(driver); action.keyDown(Keys.CONTROL); //按下Ctrl键 action.keyDown(Keys.SHIFT); action.keyDown(Keys.ALT); action.keyDown(Keys.CONTROL); //按下Ctrl键 action.keyDown(Keys.SHIFT); action.keyDown(Keys.ALT); action.keyDown(Keys.SHIFT).sendKeys("abcdefg").perform(); }
23.模拟鼠标右键事件
public static void rightClickMOuse(){ driver.get("http://www.sogou.com/"); Actions action=new Actions(driver); action.contextClick(driver.findElement(By.id("query"))).perform(); }
24.在指定元素上方进行鼠标悬浮
public static void roverOnElement(){ driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html"); driver.manage().window().maximize(); sleep(2000); WebElement element=driver.findElement(By.xpath(".//*[@id='action']/input")); Actions action=new Actions(driver); action.moveToElement(element).perform(); }
25.在指定元素上进行鼠标单击左键和释放的操作
action.clickAndHold(element).perform();
action.release(element).perform();
26.查看页面元素的属性
element.getAttribute("value");
27.获取页面元素的CSS属性值
element.getCssValue("width");
28.隐式等待
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
另外一种,笨方法等待,使当前线程进入等待,Thread.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以要慎用此方法。
29.常用的显式等待
显式等待比隐式等待更节约测试脚本执行的时间,推荐尽量使用显式等待方式来判断页面元素是否存在。使用ExpectedConditions类中自带的方法,可以进行显式等待的判断。显式等待可以自定义等待的条件,用于更加复杂的页面元素状态判断。常用的显式等待条件如下表所示。
等待的条件 | WebDriver方法 |
页面元素是否在页面上可用和可被单击 | elementToBeClickable(By locator) |
页面元素处于被选中状态 | elementToBeSelected(WebElement element) |
页面元素在页面中存在 | presenceOfElementLocated(By locator) |
在页面元素中是否包含特定的文本 | textToBePresentInElement(By locator) |
页面元素值 | textToBePresentInElementValue(By locator, java.lang.String text) |
标题 | titleContains(java.lang.String title) |
只有满足显式等待的条件要求,测试代码才会继续向后执行后续的测试逻辑。如果超过设定的最大显式等待时间阈值,则测试程序会抛出异常,测试用例被认为执行失败。
public static void testExplictWait1(){ driver.get("http://www.baidu.com"); driver.manage().window().maximize(); sleep(2000); WebElement element=driver.findElement(By.id("kw")); element.sendKeys("elon musk"); element=driver.findElement(By.id("su")); element.click(); //声明一个WebDriverWait对象,设定触发条件的最长等待时间为10秒 WebDriverWait wait=new WebDriverWait(driver,10); wait.until(ExpectedConditions.titleContains("elon")); System.out.println("end"); }
30.自定义的显式等待
public static void testExplictWait2() { driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html"); driver.manage().window().maximize(); sleep(2000); WebElement element=driver.findElement(By.className("wait")); element.click(); WebElement redDiv=(new WebDriverWait(driver,100)) .until(new ExpectedCondition<WebElement>(){ public WebElement apply(WebDriver d){ return d.findElement(By.className("red")); } }); System.out.println(redDiv.getText()); }