1、自动化测试:将人为的测试行为转化为机器执行的过程。
2、为什么要进行自动化测试:解决回归测试;解决压力测试;解决兼容性测试;提高测试效率,保证产品质量。
3、selenium简介:selenium是一个用于Web应用程序测试的工具。
4、selenium功能特性:selenium是一个开源和可移植的Web测试框架;selenium IDE为创作测试提供了回放和录制功能;selenium支持各种操作系统,浏览器和编程语言。
5、selenium局限性:selenium不支持桌面应用程序的自动化测试;无法使用selenium对Web服务执行自动化测试;无法对图像执行测试。selenium没有任何内置的报告功能,必须依赖JUnit和TestNG等插件来获取测试报告。
6、selenium IDE简介:是Selenium Suite下开源的Web自动化测试工具。
7、第一个测试:
执行:
解决报错:
8、Selenium WebDriver简介:提供了各种语言环境的API来支持编写符合标准软件开发实践的应用程序,支持Java、Python等编程语言进行自动化测试脚本编写。
9、Selenium WebDriver常用命令
1.获取网页:get()方法和navigate()方法。
driver.get("www.baidu.com");
driver.navigate().to("www.baidu.com");
2.查找表单并发送用户输入:fd.findElement(By.id("kw")).sendKeys("京东");
3.清除用户输入:clear()方法。
driver.findElement(By.name("wd")).clear();
4.使用getText()方法来获取通过任何web元素写入的数据。
fd.findElement(By.id("kw")).getText();
5.click()方法方法用于对任何Web元素执行单击操作。
fd.findElement(By.linkText("新闻")).click();
6.在浏览器历史记录中向后导航:driver.navigate().back();
7.在浏览器历史中记录中向前导航:driver.navigate().forward();
8.刷新/重新加载页面:driver.navigate().refresh();
9.关闭浏览器:driver.close();
10.关闭浏览器和与驱动程序关联的其他所有窗口:driver.quit();
11.在 Windows 之间移动:driver.switchTo().window("windowName");
12.在 frame 之间移动:driver.switchTo().frame("frameName");
10、基本元素定位
根据 id 来获取元素,id值是唯一的;
根据元素 name 属性获取元素;
根据元素的标签名(tagName)来获取元素;
根据元素的样式class值(className)来获取元素;
根据超链接的文本值(linkText)来获取元素;
根据超链接的部分文本值(partialLinkText)啦获取元素;
根据xpath定位:是一个path(路径),相当于元素的坐标;
private static FirefoxDriver fd; public static void main(String[] args) { openFireFox(); //id定位 //fd.findElement(By.id("kw")).sendKeys("京东"); //name定位 //fd.findElement(By.name("wd")).sendKeys("京东"); //tagName定位 //fd.findElement(By.tagName("input")).sendKeys("京东"); //className定位 //fd.findElement(By.className("s_ipt")).sendKeys("京东"); //复合类名的问题 //fd.findElement(By.className("s_btn")).click(); //LinkText定位 //fd.findElement(By.linkText("新闻")).click(); //partialLinkText定位 //fd.findElement(By.partialLinkText("新")).click(); //cssSelector元素定位 //(1) tagName定位 //fd.findElement(By.cssSelector("input")); //(2) id定位 //fd.findElement(By.cssSelector("#kw")).sendKeys("京东"); //(3) className定位 //fd.findElement(By.cssSelector(".s_ipt")).sendKeys("京东"); //fd.findElement(By.cssSelector(".bg .s_btn")).click(); //xpath定位 //fd.findElement(By.xpath("//*[@id='kw' and @name='wd']")).sendKeys("京东");//多属性定位 //fd.findElement(By.xpath("//a[text()='新闻']")).click();//全部文本定位 //fd.findElement(By.xpath("//a[contains(text(),'hao')]")).click();//全部或部分文本 } public static void openFireFox() { System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe"); System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe"); //1、打开firefox浏览器 fd = new FirefoxDriver(); //2、访问百度 fd.get("https://www.baidu.com"); }
11、隐式等待和显式等待
1.隐式等待:在设置的超时时间范围内不断查找元素,直到找到元素或超时。
2.显式等待:用来等待某个条件发生后在继续执行后续代码。
private static FirefoxDriver fd; public static void main(String[] args) throws InterruptedException { openFireFox(); //隐式等待 //fd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); fd.get("http://www.baidu.com"); fd.findElement(By.id("kw")).sendKeys("京东"); fd.findElement(By.id("su")).click(); //显式等待 WebDriverWait wd = new WebDriverWait(fd, 5); wd.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='官方']"))); fd.findElement(By.xpath("//a[text()='官方']")).click(); } public static void openFireFox() { System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe"); System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe"); fd = new FirefoxDriver(); }
12、select下拉框
如果网页是一个下拉框,将web元素封装为Select对象。
select.getOptions() 获取所有选项。
select.selectByIndex() 根据索引选中对应的元素。
select.selectByValue() 选择指定value值对应的选项。
select.selectByVisibleText() 选中文本值对应的选项。
private static FirefoxDriver fd; public static void main(String[] args) throws InterruptedException { openFireFox(); fd.get("http://www.baidu.com"); fd.findElement(By.id("s-usersetting-top")).click(); fd.findElement(By.xpath("//a[text()='高级搜索']")).click(); Thread.sleep(2000); WebElement we = fd.findElement(By.className("c-select-arrow-up")); Select select = new Select(we); select.deselectByIndex(1); Thread.sleep(2000); select.selectByVisibleText("最近一月"); } public static void openFireFox() { System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe"); System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe"); fd = new FirefoxDriver(); }
13、鼠标操作
通过Actions对象可以发起鼠标左键、右键等操作,最后使用perform方法执行操作。
private static FirefoxDriver fd; public static void main(String[] args) throws InterruptedException { openFireFox(); //鼠标操作 fd.get("http://www.treejs.cn/v3/demo/cn/exedit/drag.html"); WebElement sourceElement = fd.findElement(By.id("treeDemo_2_span")); WebElement targetElement = fd.findElement(By.id("treeDemo_3_span")); Actions actions = new Actions(fd); actions.clickAndHold(sourceElement).moveToElement(targetElement).release().build().perform(); } public static void openFireFox() { System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe"); System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe"); fd = new FirefoxDriver(); }