目录
一、WebElement
1、click()——触发当前元素的点击事件
2、clear()——清空内容
3、sendKeys(...)
5、getTagName()——获取元素的的标签名
6、getAttribute(当前标签具有的属性名称)——获取属性值()
根据属性名获取元素属性值 常用于断言
7、getText()——获取当前元素的文本值
常用于断言
二、WebDriver
1、get(String url)
2、getCurrentUrl()
3、getTitle()
4、getPageSource()
5、quit()
6、close()
8、window基本操作
三、三种等待方式
1、硬性等待
2、隐式等待
思考场景:
3、显式等待
几种方法:
四、【元素是否可见】和【元素是否可点击】和【元素存在】
说明:总结内容均以java演示
一、WebElement
WebElement 常用API:
click、sendKeys、clear、getAttribute、getText、Keys.ENTER(回车)、isDisplayed(是否显示)、isSelected(是否被选中)、isenabled(是否可用)
1、click()——触发当前元素的点击事件
2、clear()——清空内容
3、sendKeys(...)
往文本框一类元素中写入内容 一般获取元素后不要直接sendkeys,先用一个变量接收它
4、按键操作,回车 解决button不好定位和点击的情况,用回车去解决
element.sendKeys(Keys.CONTROL,"a");//ctrl+a 全选
element.sendKeys(Keys.CONTROL,"x");//ctrl+x 剪切
element.sendKeys(Keys.CONTROL,"c");//ctrl+c 复制
element.sendKeys(Keys.CONTROL,"v");//ctrl+v 粘贴
element.sendKeys(Keys.ENTER);//回车
element.sendKeys(Keys.BACK_SPACE);//删除
element.sendKeys(Keys.SPACE);//空格键
5、getTagName()——获取元素的的标签名
6、getAttribute(当前标签具有的属性名称)——获取属性值()
根据属性名获取元素属性值 常用于断言
7、getText()——获取当前元素的文本值
常用于断言
二、WebDriver
WebDriver 常用API:
getCurrentUrl、getTitle、getPageSource、maximize、quit()
1、get(String url)
访问指定url页面
2、getCurrentUrl()
获取当前页面的url地址, 断言常用,比如登录之后判断url
3、getTitle()
获取当前页面的标题,获取网页的标题,原码中title标签的内容
4、getPageSource()
获取当前页面源代码,html
5、quit()
关闭驱动对象以及所有相关的窗口,浏览器关闭了,quit所有网页都关了 driver不能再操作,只能重新创建一个driver
6、close()
关闭当前窗口,闭当前窗口 tab,其他tab和浏览器还在
在原有window窗口基础上,打开一个新的window窗口,需要切换之后,才能关闭新打开的window;不然直接关闭的是最先访问的window
7、navigate对象--导航栏
关于浏览器的基本功能操作,大部分都是由navigate对象提供的,如完成浏览器回退或者导航到指定url页面等操作
8、window基本操作
关于窗口的设置,基本都是由window对象提供的
//窗口最大化 最大化和全屏不一样,实际测试一般在窗口最大化的时候进行
window.maximize();
//浏览器全屏
window.fullscreen();
//窗口位置
window.getPosition();
//窗口大小
window.getSize();
三、三种等待方式
问题:当网速或机器不够顶的时候,操作一个元素时候可能页面还没渲染完,可能会出现如下报错:ElementNotInteractableException: element not interactable((可)交互的)——元素不可交互,原因页面渲染未完毕
解决办法:这时候就需要等待,当有元素不等待会报错、找不到等情况,就需要加等待
1、硬性等待
Thread.sleep(long millis); 硬性等待(强行等待,等待时间过长)sleep(毫秒)
-
优点:使用简单
-
缺点:容易造成时间浪费
-
使用场景:有的浏览器只能用硬性等待,或者有点场景显示/隐式等待都不行
2、隐式等待
在设置的超时时间范围内不断查找元素,直到 找到元素(元素存在)或者超时为止
全局的,就是设置了隐式等待后,每一条查找语句都要去隐式等待
如:设置等待时间为5秒,在第3秒找到元素,不再继续等待
-
特点:全局,去当前网页的源码html中找,找到了该元素就不等待,一般等待一些常见的元素
-
设置方式:driver.manage.timeouts().implicitlyWait(long time, TimeUnit unit);
long time:等待时长数字, TimeUnit unit:等待时长单位
//设置等待时间为5秒
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
-
优点:相对灵活
-
缺点:设置针对全局,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待
只能等待元素存在,不能适用条件更复杂的情况,如:元素可点击、元素可见才能操作,
需要注意⚠️隐式等待是查元素是否在html源码存在,存在不一定可点击
思考场景:
比如一个弹窗的关闭按钮❌,页面缩放的时候看不到❌也不能点击,但是这时候html源码中是存在的,如果用隐式等待 能找到,但是实际执行点击操作却不行;
因为从html找到该元素,并不一定能点击,能可见,这时候需要——显式等待
3、显式等待
显式等待通常是我们自定义的一段代码,用来等待某个条件发生后再继续执行后续代码
(如元素存在、元素可点击、元素可见等)
-
特点:针对每一个元素可以设置不同的等待时间和等待条件,如果超时就报错
-
使用方式:
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectCondition.方法(元素路径));
WebDriverWait(driver,5)------表示:等待5秒,还有第三个参数,
不传的话默认500毫秒,即:每0.5秒轮训查找一次
-
优点:
该方式不是全局设置,因此特定需要等待的元素可以这样处理,推荐优先使用这一种方法。
几种方法:
方法 | 等待条件 |
---|---|
presenceOfElementLocated==和隐式等待效果一样,是否在源码中存在 | 页面元素在页面中存在 |
visibilityOfElementLocated | 页面元素在页面存在并且可见 |
elementToBeClickable | 页面元素是否在页面上可被单击 |
urlContains("url")) | 等待url是否包含,返回boolean类型 |
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable
(By.xpath("//span[@class='layui-layer-setwin']//a")));
element.click();
四、【元素是否可见】和【元素是否可点击】和【元素存在】
不可见一定不可点击,可见不一定可点击(比如有可能被弹窗盖住了...),可点击一定可见
存在不一定可见,可见一定存在
android的toast,就是存在但是不可见:
presenceOfElementLocated定位到,visibilityOfElementLocated定位不到
假设:要判断某个元素超过指定的个数,就可以执行下面的操作。