自动化+接口测试

自动化测试

配置

  • 编译器自动补全键:window-preference-editor-content assist-中间
  • jar要build path

游览器设置

System.setProperty("webdriver.chrome.driver","路径");
WebDriver driver=new ChromeDriver();

游览器操作 

//游览器打开网站
driver.get("url");

//游览器关闭当前页面
driver.close();

//游览器彻底关闭
driver.quit();

//游览器返回
driver.navigate().back();

//游览器前进
driver.navigate().forward();

//游览器刷新
driver.navigate().refresh();

//游览器页面全屏
driver.manage().window.fullscreen();

//游览器最大化
driver.manage().window.maximize();

//设置游览器大小
Dimension size=new Dimension(300,400);
driver.mange().window.setSize(size);

//获取页面信息
String title=driver.getTitle();
String current=driver.getCurrentUrl();
String htmlsrc=driver.getPageSource();

3种等待

强制等待
  • 设置固定休眠时间
  • 缺点:无法自动判断元素是否出现,如果设置的时间比较长,就会浪费时间。
  • Thread.sleep()
隐式等待
  •  设置全局等待时间

  • 设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
  • 如设置超时10秒,使用imlicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环查找元素,浏览器在不停的刷新页面,如果超时间10秒还没有找到,则抛出异常
  • driver.manage().timeouts().implicity(10,TimeUnit.SECONDES(Duration.ofSecond(10))
显示等待
  •  针对特定元素设置等待时间
  • 在设置的时间内,默认每隔0.5s检测一次当前页面某个元素是否存在,如果找到元素直接返回,如果超时没有找到元素抛出异常。
  • WebDriverWait wait=new WebDriverWait(driver,5);
    
    //是否可用和被单击
    wait.until(ExceptedConditions.elementToBeClickable(By.LinkText("百度一下")));
    
    //是否被选中
    wait.until(ExceptedConditions.elementToBeSelected);
    
    //是否存在
    wait.until(ExceptedConditions.presenceOfElementLocated());
    
    //是否包含在特定的文本
    wait.until(ExceptedConditions.textToBePresentInElement(,));
    
    //页面元素值
    wait.until(ExceptedConditions.textToPresentElementValue("",""));
    
    //title
    wait.until(ExceptedConditions.titleCOntains(""));

8种定位方式

  • ID:driver.findElement(By.id(""))
  • name:driver.findElement(By.name(""))
  • class:driver.findElement(By.className(""))
  • tag:driver.findElement(By.tagName(""))
  • xpath:driver.findElement(By.xpath(""))
  • css:driver.findElement(By.cssSelector(""))
  • 链接全部文本:driver.findElement(By.linkText(""))
  • 链接部分文本:driver.findElement(By.partialLinkText(""))

xpath相对路径定位 

  • 精确匹配:dirver.findElement(By.xpath("//input[@value='查询']"));
  • 模糊匹配:driver.fineElement(By.xpath("//*[@value='查询']"));
  • 和匹配:driver.findElement(By.xpath([@id='KW'and@class='su']))
  • 索引匹配:dirver.findElement(By.xpath("//input[1]"));第一个
  • 文本匹配:driver.findElement(By.xpath("//a[text()='文本']"));
  • 属性匹配://input[starts-with(@name,‘name1’)] 查找name属性中开始位置包含’name1’关键字的页面元素
  • 包含匹配://input[contains(@name,‘na’)] 查找name属性中包含na关键字的页面元素

css相对路径定位 

  • 第一个input元素:dirver.findElement(By.cssSelector("input"));
  • 开头包含模糊匹配:dirver.findElement(By.cssSelector("a[href^='https']");
  • 包含模糊匹配:dirver.findElement(By.cssSelector("a[href*='baidu']"));
  • 结尾模糊匹配:driver.findElement(By.cssSelector("a[href$='baidu.com']"));
  • 结合属性:driver.findElement(By.cssSelector("input[type='button']"));
  • 复合属性:driver.findElement(By.cssSelector("img[alt='aaa'][href='https://baidu.com']"));
  • 标签与class属性:driver.findElement(By.cssSelector("input.sipt"));
  • 标签与id属性:driver.findElement(By.cssSelector("input#kw"));

元素操作

  • 清除:ele.clear()
  • 输入:ele.sendkeys()
  • 获取属性:ele.getAttribute()
  • 是否可点击:ele.isEnabled()
  • 是否显示:ele.isDisplayed()
  • 是否被选中:ele.idSelected()

下拉框 

WebElement ele_province =driver.findElement(By.id("province"));
Select sel_province=driver.findElement(sel_province);
sel_province.selectByIndex(0);
sel_province.selectByValue("pear");
sel_province.selectByVisbleText("河北省");
sel_province.deselectAll();
  • 查看是否是多选
f1.isMultiple()
f1.getFirstSelectedOption().getText()
  • 复选框全部点击
List fruit=driver.findElement();
for(WebElement f:fruit){
    f.click();
}

切换iframe界面 

  • 第一个子界面:driver.switchTo().frame(0);
  • name或id driver.switchTo().frame("");
  • 切换到主界面 driver.switchTo().defaultContent();

弹窗

确定、取消、输入、获取弹窗内容

Alert alert=driver.switchTo().alert();
alert.accept();
alert.dismiss();
alert.sendkeys("ok");
alert.getText();

模拟键盘

  • Actions action=new Actions(driver);
  • 输入:action.sendkeys(driver.findElement(By.id("user")),"admin").perform();
  • 点击:action.click().perform();
  • 滑动:action.moveToELement(driver.findElement()).perform();
  • TAB键:action.keydown(key.TAB).perform();
  • ENTER键 action.keydown(key.ENTER).perform();
  • 拖拽:action.dragAndDrop(source,target).perform();
  • 右键 action.contextClick().bulid.perform();
  • 长按左键:action.clickAndHold().perform();
  • 释放左键:action.release().perform()

滚动条

  • 滚动条 JavaScriptExecutor js=(JavaScriptExecutor) driver;
  • 滚动到最下面 js.executeScript("window.scroll(0,document.body.scrollHeight)");
  • 滚动到指定元素:js.executeScript("arguments[0].scrollIntoView()",driver.findElement(By.LinkText()));
  • 滚动到某个像素 js.executeScript("window.scrollBy(0,800)")

截屏操作

File pic=((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
String nowDateTime=(new SimpleDateFormat("yyyyMMdd"-HHmmss")).format(new Date());
File.copy(pic,new File(""+nowDateTime+".JPG"));

结合js脚本定位

String a=driver.findElement(By.tagName("p")).getText();
String b=driver.findElemnt(By.id("btn")).getAttribute("onclick");

设置和删除页面对象属性值

JavaScriptExecutor jse=(JavaScriptExecutor) driver;
jse.executeScript("argunments[0].setAttribute(arrgumnet[1],arguments[2]);",locator,"size","10");
jse.executeScript("arguments[0].removeAttribute(arguments[1]);",locator,"size")

断言

  • 硬断言assertEquals(a,b)
  • 软断言(异常也会继续执行)SoftAssert sa=new SoftAssert(); sa.assertEquals(1,2);

PO模式

  • 基础层:主要放selenium原生的方法
  • 页面对象层:主要用于放页面的元素和页面的动作
  • 测试用例层:存放测试用例及测试数据
  • 基础层只是拿来封装用的,就是一些工具,一些通用的东西。
  • 页面对象层,就是我们所说的元素层,UI界面的元素,还有一些时间等待(强制等待/显示等待等待),还有一些返回浏览器返回上一层页面,刷新什么。
  • 测试用例层,就只是单纯的一个测试用例层,只需要有测试用例还有断言即可。 

自动化测试框架

接口测试

get请求百度

CloseableHttpClient httpclient=null;
CloseableHttpResponse response=null;

//1.初始化httpclient对象
httpclient=HttpClients.createDafault();

//2.初始化httpget对象
HttpGet httpget=new HttpGet("http://www.baidu.com");

//3.执行HttpGet请求,获取resonse
repsonse=httpclient.execute(httpGet);
System.out.println(response.getCode() + " "+ response.getReasonPhrase());

//4.使用HttpEntity获得Response的实体
HttpEntity entity=response.getEntity();
System.out.printIn(EntityUtils.toString(entity,"UTF-8"))

//5.释放资源
EntityUtils.consume(entity);

//6.关闭连接
response.close();
httpclient.close();

你可能感兴趣的:(《全力以赴的测试派》冲击春招,测试,自动化,运维)