selenium浏览器自动化测试

Selenium是什么

1.概念
selenium是用来做web自动化测试的框架
2.特点

  • 支持各种浏览器
  • 支持各平台
  • 支持各种语言
  • 有丰富的API

自动化测试是什么

自动化测试是使用专门的软件工具来验证软件解决方案,这通常涉及自动化功能作为测试过程的一部分。

定位元素

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街
道、楼层、门牌找到这个人。

Selenium提供了8种定位方式:

  • id
  • name
  • class name
  • tag name
  • link text
  • partial link text
  • xpath
  • css selector

例如,我们去对百度页面的输入框进行测试,定位到输入框,输入软件测试
在这里插入图片描述

 private static  void test() throws InterruptedException, IOException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        //通过id来定位
        webDriver.findElement(By.id("kw")).sendKeys("软件测试");
        //通过name来定位
        webDriver.findElement(By.name("wd")).sendKeys("软件测试");
        //通过xpath来定位
        webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("软件测试");
        //通过css选择器来定位
        webDriver.findElement(By.cssSelector(".s_ipt")).sendKeys("软件测试");
    }

在这里插入图片描述

css选择器

id选择器:#id
类选择器:.class
标签选择器:标签名,例如input、h3等
后代选择器:父级选择器,子级选择器

例如:
定位input输入框:
在这里插入图片描述
id选择器:#id

WebElement element=webDriver.findElement(By.cssSelector("#kw"));

类选择器:.class
在这里插入图片描述

WebElement element=webDriver.findElement(By.cssSelector(".s_ipt"));

标签选择器:标签名
点击名为area的标签
在这里插入图片描述

webDriver.findElement(By.cssSelector("area")).click();

后代选择器:父级选择器,子级选择器

点击名为area的标签
在这里插入图片描述

webDriver.findElement(By.cssSelector("map>area")).click();

该例子中,map为父级,area为子级

xpath选择器

绝对路径:从根目录开始,是一个完整的路径。
例:D:\demo\img\car.jpg

相对路径:指相对于当前目录的路径。当前工作目录是指用户当前正在工作的目录。在开发中引用js、css、或者图片等,都是使用相对路径。
例如:. ./img/bg.jpg"
查找:
在这里插入图片描述

  • 相对路径+索引 ://form[1]/span[1]/input
webDriver.findElement(By.xpath("//form[1]/span[1]/input")).submit();
  • 相对路径+属性值 ://input[@class="s_ipt"]或者//input[@id="kw"]
webDriver.findElement(By.xpath("//input[@class="s_ipt"]")).submit();
  • 相对路径+通配符 ://*[@*="kw"]
webDriver.findElement(By.xpath("//*[@*="kw"]")).submit();
  • 相对路径+文本匹配: //a[text()="新闻"]
 webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).submit();

在这里插入图片描述

操作对象

清空文本内容clear():

 webDriver.findElement(By.cssSelector("#kw")).clear();

输入sendKeys():

webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");

单击click():

webDriver.findElement(By.cssSelector("#su")).click();

提交表单submit():

webDriver.findElement(By.cssSelector("#su")).submit();

获取空间大小getSize():

webDriver.findElement(By.cssSelector("title")).getSize();

获取对象的属性值getAttribute(“属性名称”):

String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");

注意:click和submit的区别
如果点击的元素放在form标签中,则使用submit和click的效果都是一致的,否则,就使用click,因为使用submit会报错

窗口定位

WebDriver提供了switchTo().window()方法可以实现在不同的窗口之间切换

 webDriver.switchTo().window();
private static void test() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(3000);
        // 通过getWindowHandles获取所有的窗口句柄
        // 通过getWindowHandle获取的get打开的页面窗口句柄
        System.out.println(webDriver.getWindowHandle());
        Set<String> handles = webDriver.getWindowHandles();
        String target_handle = "";
        for(String handle:handles) {
            target_handle = handle;
        }
        //定位
        webDriver.switchTo().window(target_handle);
        sleep(3000);
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("新闻联播");
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();

    }

添加等待

sleep(强制)休眠:

//表示休眠3秒,单位是毫秒
sleep(3000);

隐式等待:
隐式等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长

//隐式等待,TimeUnit.DAYS表示单位为天
webDriver.manage().timeouts().setScriptTimeout(3, TimeUnit.DAYS);

显式等待:
隐式等待和显式等待的区别:
隐式等待等待的是所有的元素,也就是等待把当前的页面元素加载完全
显式等待等待的是一定的条件,即以下例子

//显式等待,等指定元素加载出来了,就结束等待
WebDriverWait wait=new WebDriverWait(webDriver,3000);
wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
    }

打印信息

getTitle():

String title=webDriver.getTitle();

getCurrentUrl():

String url=webDriver.getCurrentUrl();

getText():获取对象文本

webDriver.findElement(By.cssSelector("title")).getText();

浏览器操作

back()浏览器后退:

//浏览器后退
webDriver.navigate().back(); 

forward()浏览器前进:

//浏览器前进
webDriver.navigate().forward();

refresh()刷新:

//刷新
webDriver.navigate().refresh();

maximize()浏览器最大化:

 webDriver.manage().window().maximize();

setSize()设置浏览器高、宽:
根据指定的大小显示

 webDriver.manage().window().setSize(new Dimension(width,high));

fullscreen()浏览器全屏:

 webDriver.manage().window().fullscreen();

quit()关闭浏览器:
关闭整个浏览器,并且会清空缓存

 webDriver.quit();
 webDriver.close();

close()关闭窗口:
关闭当前窗口,不会清空缓存
在这里插入图片描述
浏览器滚动:

//将浏览器滚动条滑到最顶端
document.documentElement.scrollTop=0
//将浏览器滚动条滑到最底端
document.documentElement.scrollTop=10000

使用说明:

((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");

鼠标操作

perform()执行所有Actions中存储的行为
contextClick()右击
moveToElement()移动
doubleClick()双击
dragAndDrop()拖动

Actions(webDriver):
生成用户的行为,所有的行动都存储在Actions对象。通过perform()执行所有Actions中存储的行为

 private static  void test() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        WebElement webelement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //生成用户的行为
        Actions actions=new Actions(webDriver);
        sleep(3000);
        //鼠标移动到指定元素,再右击,再执行
        actions.moveToElement(webelement).contextClick().perform();

    }

键盘操作

以下为常用的键盘操作:

  • sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)
  • sendKeys(Keys.SPACE) 空格键 (Space)
  • sendKeys(Keys.TAB) 制表键 (Tab)
  • sendKeys(Keys.ESCAPE) 回退键(Esc)
  • sendKeys(Keys.ENTER) 回车键(Enter)
  • sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
  • sendKeys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
  • sendKeys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
  • sendKeys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
代码
sendKeys(Keys.BACK_SPACE)回格键(BackSpace)
sendKeys(Keys.SPACE)空格键 (Space)
sendKeys(Keys.TAB)制表键 (Tab)
sendKeys(Keys.ESCAPE)回退键(Esc)
sendKeys(Keys.ENTER)回车键(Enter)
sendKeys(Keys.CONTROL,‘a’)全选(Ctrl+A)
sendKeys(Keys.CONTROL,‘c’)复制(Ctrl+C)
sendKeys(Keys.CONTROL,‘x’)剪切(Ctrl+X)
sendKeys(Keys.CONTROL,‘v’)粘贴(Ctrl+V)
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"A");//全选
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"X");//剪切
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"C");//复制
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"V");//粘贴

下拉框处理

Select select = new Select(webElement);
select.selectByIndex(下标);//下标从0开始
或select.selectByValue("");//填入属性为value的值

alert、confirm、prompt的处理

text返回alert、confirm、prompt中的文字信息
dismiss()点击取消按钮
accept()点击确认按钮
sendKeys()输入值,如果alert没有对话框就不能用了,不如会报错
注意:switchTo().alert()只能处理原生的alert
alert:

// alert弹窗取消
webDriver.switchTo().alert().dismiss();
// 在alert弹窗中输入
webDriver.switchTo().alert().sendKeys("测试");
 // alert弹窗确认
webDriver.switchTo().alert().accept();
//获取文字
webDriver.switchTo().alert().getText();

截图操作

//截图,以文件的形式存储
File file=((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
//存储的文件名
FileUtils.copyFile(file,new File("E://20230901jietu.png"));

上传文件操作

private static void page() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/_20230512testcode/src/main/Page/test05.html?_ijt=7asvni2vctahrdl90k8v4lvq5&_ij_reload=RELOAD_ON_SAVE");
        //sendKeys里是上传文件的路径
        webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\untitled");
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值