0


【selenium】WebElement常用api、WebDriver常用api、三种等待方式

说明:总结内容均以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、maximizequit()

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定位不到

假设:要判断某个元素超过指定的个数,就可以执行下面的操作。


本文转载自: https://blog.csdn.net/weixin_40772077/article/details/136229072
版权归原作者 墨撕酒家 所有, 如有侵权,请联系我们删除。

“【selenium】WebElement常用api、WebDriver常用api、三种等待方式”的评论:

还没有评论