selenium超全教程(4)-持续更新中

selenium超全教程(4)-持续更新中,第1张

单选比较好 *** 作,先定位需要单选的某个元素,然后点击一下即可。

多选好像也比较容易,依次定位需要选择的元素,点击即可。

下拉框的 *** 作相对复杂一些,需要用到Select模块。

先导入该类

在select模块中有以下定位方法

测试页面

然后,再演示下拉框的不同选择的方式

Selenium打开一个页面之后,默认是在父页面进行 *** 作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_toframe()就来了。如果想回到父页面,用switch_toparent_frame()即可。

既然是模拟浏览器 *** 作,自然也就需要能模拟鼠标的一些 *** 作了,这里需要导入ActionChains 类。

左键

这个其实就是页面交互 *** 作中的点击click() *** 作。

右键

context_click()

在上述 *** 作中

双击

double_click()

drag_and_drop(source,target)拖拽 *** 作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的 *** 作之类。

selenium中的Keys()类提供了大部分的键盘 *** 作方法,通过send_keys()方法来模拟键盘上的按键。

引入Keys类

常见的键盘 *** 作

send_keys(KeysBACK_SPACE):删除键(BackSpace)

send_keys(KeysSPACE):空格键(Space)

send_keys(KeysTAB):制表键(TAB)

send_keys(KeysESCAPE):回退键(ESCAPE)

send_keys(KeysENTER):回车键(ENTER)

send_keys(KeysCONTRL,'a'):全选(Ctrl+A)

send_keys(KeysCONTRL,'c'):复制(Ctrl+C)

send_keys(KeysCONTRL,'x'):剪切(Ctrl+X)

send_keys(KeysCONTRL,'v'):粘贴(Ctrl+V)

send_keys(KeysF1):键盘F1

send_keys(KeysF12):键盘F12

实例 *** 作演示:

定位需要 *** 作的元素,然后 *** 作即可!

如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。

等待有三种方式:强制等待、隐式等待和显式等待

1强制等待

直接timesleep(n)强制等待n秒,在执行get方法之后执行。

2隐式等待

implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。

3 显式等待

设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。

WebDriverWait的参数说明:

WebDriverWait(driver,timeout,poll_frequency=05,ignored_exceptions=None)

driver: 浏览器驱动

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 每次检测的间隔时间,默认是05秒

ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

until(method,message='')

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not(method,message='')

until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

其他等待条件

还有一些 *** 作,比如下拉进度条,模拟javaScript,使用execute_script方法来实现。

在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等 *** 作。

输出:

首先,并不是说你一打开一个页面就会产生一个session。

所谓session你可以这样理解:当你与服务端进行会话时,比如说登陆成功后,服务端会为你开壁一块内存区间,用以存放你这次会话的一些内容,比如说用户名之类的。那么就需要一个东西来标志这个内存区间是你的而不是别人的,这个东西就是 session id ( jsessionid 只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),而这个内存区间你可以理解为session。

然后,服务器会将这个session id发回给你的浏览器,放入你的浏览器的cookies中(这个cookies是内存cookies,跟一般的不一样,它会随着浏览器的关闭而消失)

'''

options = webdriverChromeOptions()

optionsadd_argument('--headless') # 可以使用无头模式

driver = webdriverChrome(executable_path=CHROME_DRIVER_PATH, chrome_options=options)

driverget(URL) # 打开一个地址

cookie = driverget_cookies() #获取所有cookie列表

hsession = cookie[0]['value']

'''

在Chrome的开发者工具的application/cookie里面可以查到你要访问的session

招聘顺丰科技

测试工程师( 薪资15-25k)

岗位描述

知识点:

知识点:了解 driver对象的常用属性和方法

注意:最新版本的selenium已经取消了这种格式,取而代之的是:

你要先导入:

然后再:

知识点:掌握 driver对象定位标签元素获取标签对象的方法

代码实现,如下,获取腾讯新闻首页的新闻标签的内容。

知识点:掌握 元素对象的 *** 作方法

参考代码示例:

知识点:掌握 selenium控制标签页的切换

知识点:掌握 selenium控制frame标签的切换

知识点:掌握 利用selenium获取cookie的方法

知识点:掌握 selenium控制浏览器执行js代码的方法

知识点:掌握 手动实现页面等待

知识点:掌握 selenium开启无界面模式

知识点:了解 selenium使用**

知识点:了解 selenium替换user-agent

举一反三:

那么下拉框如何定位页面元素呢?dom示例:

那么定位去 *** 作它的方法,也应该同多选框 *** 作一直:

@Test

void test_select() throws InterruptedException {

WebElement element = driverfindElement(Byid("fruitselect"));

Select select = new Select(element);

// 下面根据不同方法选择下拉框的值

Threadsleep(2000);

selectselectByIndex(2);

Threadsleep(2000);

selectselectByValue("orange");

Threadsleep(2000);

selectselectByVisibleText(" 苹果 ");

// 遍历集合打印下拉框的所有值

List options = selectgetOptions();

for (WebElement option : options) {

Systemoutprintln("输出单选值:"+optiongetText());

}

}

8、掌握alert、confirm、prompt三种d框处理;这三种d窗的处理方式不出意外都是Alert类来处理。

9、 selenium 三种等待方式的原理及使用场景:强制等待、隐式等待、显示等待;时间同步机制。

10、selenium等待条件,isEnabled()isSelected()源码分析:

比如在某些场景中,需要等待元素出现后才能 *** 作它,这时需要的是等待,至于是哪种等待呢?需要结合实际场景来分析:

// 下面这个 *** 作是先找元素,是否现实,这里有一个条件即使是隐藏元素,它还是存在dom中,而有些隐藏是不一定会存在dom,那么查找元素是会报异常:NoSuchElementException

@Test

public void test_display() throws InterruptedException {

WebElement el = driverfindElement(Byid("displayed-text"));

Systemoutprintln("判断输入框是否显示:" + elisDisplayed());

if (elisDisplayed()) {

elsendKeys("displayed");

Systemoutprintln("点击隐藏按钮,元素被隐藏");

driverfindElement(Byid("hide-textbox"))click();

}

Threadsleep(3000);

WebElement ele = driverfindElement(Byid("displayed-text"));

// 因为知道上面的 *** 作是默认显示,并且输入值,if判断为true表示显示,然后输入文本内容并点击隐藏

if (!eleisDisplayed()) {

// 如果是隐藏的,下面 *** 作显示并输入内容

driverfindElement(Byid("show-textbox"))click();

Systemoutprintln("点击显示按钮,元素被显示");

elesendKeys("+再次打开");

}

Threadsleep(3000);

// 然后再次隐藏

driverfindElement(Byid("hide-textbox"))click();

}

tips:元素的 *** 作,判断状态:isEnabled,判断显示:isDisplayed,判断是否可选:isSelected

11、鼠标 *** 作:单击、双击、右击、键盘输入及组合键的应用;前提是前端开发支持按键 *** 作。

web 自动化中,所有键盘 *** 作不一定是支持的,需要前端开发支持。

import orgopenqaseleniumKeys;// 这个是selenium框架的关键类

// 发送单个按键 *** 作,element的sendKeys()方法即可

findElement(Byid("kw"))sendKeys(KeysENTER);

// 如果是组合键,例如control+a

String select=Keyschord(KeysCONTROL,"a");

findElement(Byid("kw"))sendKeys(select);

// 使用Actions类处理按键 *** 作

import orgopenqaseleniuminteractionsActions;

Actions action = new Actions(driver);

actionkeyDown(KeysCONTROL)sendKeys("a")keyUp(KeysCONTROL)perform();

12、需要掌握执行JavaScript的方法和技巧,JavascriptExecutor类:

import orgopenqaseleniumJavascriptExecutor;

import orgopenqaseleniumchromeChromeDriver;

SystemsetProperty("webdriverchromedriver","drivers/chromedriverexe");

driver = new ChromeDriver();

// 下行强制转换

JavascriptExecutor js=(JavascriptExecutor) driver;

13、屏幕截图:实现截屏及日期格式保存

思考:会写在哪个位置?

通常使用TestNG/junit测试框架,会使用@After注解,也就是说在每个 测试 用例执行完才截图,而不是一个测试类执行完才截图,那么就需要对执行的结果进行断言,错误才截图,而不是随意截图。

优先封装一个生成文件名的方法:

/

获取随机字符串作为文件名的长度

@param length

@return

/

public static String getRandomString(int length) {

StringBuilder sb = new StringBuilder();

String characters = "1234567890qwertyuioplkjhgfdsazxcvbnmPOIUYTREWQASDFGHJKLMNBVCXZ";

for (int i = 0; i < length; i++) {

int index = (int) (Mathrandom() characterslength());

sbappend(index);

}

return sbtoString();

}

笔记:

01设置元素等待时间

自动化测试的时候,元素定位没有错,但是跑脚本的时候却报错了

例如,登录的时候要等登录页面加载出来才能输入用户名和密码

selenium设置元素等待时间的3种方式及区别

1sleep() --固定等待时间:强制等待,不能把握准确的等等时间,适合调试时用

2implicitly_wait() --隐式等待时间:等页面加载完成才执行下一步 *** 作,一般设置一次即可

3WebDriverWait --显示等待时间:配合untill()和not untill()方法,根据判断条件 灵活处理等待时间

要先设置一个超长时间,在这个时间内,程序根据调用频率每隔几秒查看一下,如果条件满足,则执行下一步 *** 作,若不满足且超过了等待时间则抛出异常

导包:from seleniumwebdriversupportui import WebDriverWait

使用:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常)until(要执行的方法, 超时时返回的错误信息)

实例:

replace:

02键盘事件Keys类

制表符:send_keys(KeysTAB)

退出键:send_keys(KeysESCAPE)

F1:send_keys(KeysF1)   f1~f12 以此类推

03二次定位

顾名思义,通过多个元素,定位两次

drfind_element(ByCLASS_NAME,"s_input")send_keys("python")

二次定位:

drfind_element(ByNAME,"query")find_element(ByCLASS_NAME,"s_input")send_keys("python")

04selenium鼠标悬停类-- ActionChains()

导包:from seleniumwebdrivercommonaction_chainsimport ActionChains

实例:将鼠标移动至更多设置,悬停鼠标

elem1= drfind_element(ByLINK_TEXT,"设置")

ActionChains(dr)move_to_element(elem1)perform()

05selenium警告框的处理

很多web应用经常会遇到JavaScript编写的alert 、confirm 以及prompt d窗,需要用到switch_toalert来切换d窗,并对d窗进行输入信息,关闭等处理。

switch_toalerttext  --获取d窗文本信息

switch_toalertaccept()  --点击d窗中确定按钮

switch_toalertdismiss()  --点击d出中取消按钮

switch_toalertsendKeys("字符串")  --在d窗中输入信息

实例:

06下拉菜单选择的三种方式

导包:from seleniumwebdriversupportuiimport Select

#选择下拉框的o2

elem1 = drfind_element(ByID,"s3Id")

1:根据value值定位

Select(elem1)select_by_value("o2val")

2根据index定位

Select(elem1)select_by_index(1)

3根据下拉框文本信息定位

Select(elem1)select_by_visible_text("o2")

07多窗口切换

window_handles --获取所有窗口句柄

switch_towindow(指定窗口) --切换到指定窗口

08selenium之JS *** 作浏览器滚动条位置

execute_script("windowscrollTo(0,n);")

09selenium之JS *** 作隐藏元素

隐藏元素的标识:style="display:none;"

一般我们通过将隐藏元素的属性修改成显示再定位

10 *** 作excel文件

将测试数据参数化用到

101准备参数化数据文件

102导包

打开文件,填写文档路径

运行结果:

定位到sheet的位置

读取sheet的行和列的内容

#读取表的行的方法

rows = sheet1nrows

print("行数",rows)

columns = sheet1ncols

print("列数",columns)

读取指定行的值

#读取指定行的值

rowValue1 = sheet1row_values(0)

print(rowValue1)

#读取指定列的值

colValue1 = sheet1col_values(0)

print(colValue1)

#输出所有用户名和对应的密码

for iin range(1,rows):

print("用户名:" + sheet1row_values(i)[0] +",密码:" + sheet1row_values(i)[1])

以上就是关于selenium超全教程(4)-持续更新中全部的内容,包括:selenium超全教程(4)-持续更新中、使用selenium获取HSESSION(JSESSION)、从零开始学python爬虫(八):selenium提取数据和其他使用方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10088446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存