推广 热搜: 行业  机械  设备    系统  教师    参数  经纪  蒸汽 

Selenium常用API详解,从入门到进阶(上)

   日期:2025-01-02     移动:http://sjzytwl.xhstdz.com/mobile/quote/86705.html

目录

1、打开页面

2、查找页面元素

3、输入文本

4、点击操作

5、提交操作

6、清除文本

7、获取文本、属性

8、获取页面的标题和URL

9、窗口

9.1、设置窗口大小

9.2、窗口切换

9.2.1、为什么需要窗口切换

9.2.2、获取句柄的方式

9.2.3、切换句柄

10、屏幕截图

10.1、为什么需要屏幕截图

10.2、屏幕截图应用



在Selenium中通过在ChromeDriver类中的get方法里输入网址,即可打开一个页面,例如你要打开百度的网址,如下代码

 

Ps:本文讲的所有API都是基于谷歌浏览器驱动,也就是ChromeDriver类下的API~


在Selenium中,在打开页面的情况下通过indElement方法,输入By类(通过什么方式来定位元素)参数,即可定位页面元素。

例如定位百度页面的“百度一下”按钮,如下代码

 

上述栗子中使用的是CSS选择器定位,你也可以使用xpath来定位~

详细的,如下

By类中最常用的两个定位方法

1. cssSelector(),它可以通过css选择器来定位元素(推荐使用

2. className(),它可以通过xpath来定位元素

xpath如何使用呢

最常用的是用层级的方式来表示: /子级 //跳级@为属性

例如:谷歌浏览器中的Google标志

这样你就可以拿到这个标签的xpath://*[@id="logo"] 这便是跳级(前面的路径都不显示,直接表示属性id=“logo”这个标签

或者是xpath://*[@id="csdn-copyright-footer"]/ul[1]/li[2]/a 这便是一个跳级加子集的方式

值得注意的是:我们不要一个一个去推这个子集表示的方式,可以直接按照上图的方式进行拷贝xpath路径,配合着className()方法使用即可,但是有时候赋值selector或者xpath元素不一定是唯一的,需要我们进行手动修改到唯一(检查的时候通过 ctrl + f 即可检查是否唯一,这就是为什么我们要对xpath的语法要有一定了解的原因


在Selenium中使用sendKeys方法即可对你选中的元素进行输入文本,但是仅适用于文本文字和内容可以编辑的元素,例如在百度页面的搜索框内输入“你好”,如下代码

 

Ps:即使反向操作,也就是对不可编辑的元素进行操作,也不会报错,但是不会产生任何实际效果。


在Selenium中对你定位到的元素使用click方法,即可进行鼠标点击操作,例如点击百度界面的“百度一下”按钮,代码如下

 


提交操作是干什么的实际上就和你按下Enter键的效果是一样的,通过submit方法即可实现,例如在百度页面通过submit方法实现自动按下回车键,如下代码

 

Ps:selenium官方不推荐使用submit,更推荐click,因为可以使用submit的地方click都能代替,并且click使用场景更广submit仅适用于表单元素)。


在Selenium中可以使用clear将你定位的元素的文本内容进行清除,例如清除百度输入框中的文本,如下代码

 

Ps:用来频繁的测试是否可以重复输入(适用sendKeys输入后,在用clear清除、再输入然后清除......)。


在Selenium中通过getText可以获取你定位的元素的文本,例如获取百度页面热搜中的文本,如下代码

 

但如果你要获取“百度一下”这个按钮的文本就无法获取(但程序不会报错只是返回一个空字符串,因为这个元素它不含文本,只有一些属性(id、class、type、value......,如下F12检查可以看到

所以我们只能获取它的属性那么属性该如何获取呢?通过getAttribute方法即可获取到,方式和获取文本一样,先定位元素,再获取;例如你要获取class属性,那么就是getAttribute("class);


在Selenium中,这个没什么特别要注意的点,基础操作,直接上代码

 


在Selenium中,可以设置窗口的大小:最大化、最小化、全屏窗口、手动设置窗口大小;如下代码

 

9.2.1、为什么需要窗口切换

想象这样一个场景我们使用Selenium打开一个网页,在从这个网页通过click点击超链接打开另一个网页,那么我们继续使用Selenium操作网页时,是对刚刚这两个网页中的哪一个网页进行操作?实际上还是第一个网页,如果你一意孤行还认为是对第二个网页进行操作,就有可能引发如下异常(找不到该元素

实际上当浏览器每次打开一个标签页的时候,都会自动给每个标签页进行标识,也叫做“句柄”。

9.2.2、获取句柄的方式

在Selenium中,我们有如下两种方式获得句柄

 

并且哪个页面对应哪个句柄,我们是不可知的,例如我打开了两个页面,获取句柄并打印,如下

9.2.3、切换句柄

 

Ps自动化基本没有需要切换窗口的场景,因为要进行测试,就直接拿到这个网页的地址即可,没必要这样切换


        想象一下,程序执行的速度 和 页面渲染的速度 谁快?必然是程序执行快,那么当代码执行到查找结果页的元素时页面还没有加载完全,程序就会报错,如下代码

 

报错,如下图(找不到该元素

解决办法在点击“百度一下”这个按钮以后,休眠几秒即可(等待页面加载出来)。

但是自动化程序执行的速度非常快,我们怎么能知道这个地方出了什么问题呢?接着往下看~

首先需要在pom.xml中导入依赖,如下

 

接着如下代码

 

接着就可以观察到截图如下

这样我们就可以发现原因,是由于页面没有加载出来的原因~

Ps:保存截图的时候,文件名时固定的格式(已经存在重名文件,程序多次生成的截图都会被同名覆盖,为了避免这个情况,我们可以将文件名设置为动态的,也就是加入时间戳


本文地址:http://sjzytwl.xhstdz.com/quote/86705.html    物流园资讯网 http://sjzytwl.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号