0


Selenium-三大等待和四大操作

一、三大等待

WebdriverWait

1、sleep()强制等待

time.sleep()

2、智能等待:最多等待15秒,如果在15秒内,任何一个时候元素出现了,那就继续下一行代码,超时了,报超时异常,TimeoutException,NosuchElementException

2.1隐形等待:从implicitly_wait(10)源码的注释中可以看到,隐形等待的用法。

Sets a sticky timeout to implicitly wait for an element to be found,
   or a command to complete. This method only needs to be called one
   time per session. To set the timeout for calls to
   execute_async_script, see set_script_timeout.

2种场景,1个元素被找到-元素存在、1条命令执行完成

每一个会话当中,只需要被调用一次。

driver.implicitly_wait(10)

隐形等待一般不会用,通常使用显性等待。

2.2显性等待: 等待元素可见,等待新的窗口出现,隐形等待是处理不了这些的

区别:显性等待可以处理更多的场景,隐形等待处理不了,隐形等待只能处理那两种

使用方法,条件+等待

等待,等待上线-15秒,轮训周期 - 多少秒去确认,默认0.5s一次

条件,有一个专门的条件模块,Expected_condition

需要引入2个包,一个是等待,一个条件

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions

WebDriverWait(driver,15,0.5).until/not_until(条件)

这种显示等待使用频率最高

例如:

loc这个元素可见

loc = ("xpath", '')
WebDriverWait(driver, 15,0.5).until(expected_conditions.visibility_of_element_located(loc))

二、窗口切换,switch_to

1、触发新窗口

2、得到目前打开的所有窗口----句柄,每一个窗口都有一个句柄

列表,-----先后顺序,先出现的,先追加到列表,最新的窗口在列表的最后,最先打开的窗口在列表的第一位。

wins = driver.window_handles

3、切换

driver.switch_to.window(wins[-1])

在新的页面里,定位元素操作

例如:

wins = driver.window_handles

print(drver.current_window_handle)

切换到新的窗口

driver.switch_to_window(wins[-1])

使用显性等待页面元素出现

loc = (By.XPATH, '//div[@class="download-button-container"]//a')

WebDriverWait(drvier, 15).until(expected_conditions.visibility_of_element_located(loc))

driver.find_element(*loc).click()

iframe切换

1、识别元素是否在iframe当中

2、切换:

切户到iframe

driver.switch_to.frame()

支持3中方式来确定切换到哪一个iframe

1)iframe 下标

driver.switch_to.frame(3)

  1. iframe 元素的name属性

driver.switch_to.frame("login_frame_qq")

  1. iframe 这个webElement元素

driver.switch_to.frame(driver.find_element_by_xpath())

三、鼠标操作

ActionChains类

perform()执行鼠标的动作

1、悬浮:move_to_element

2、点击:click

3、双击: double_click

4、右键: context_click

5、拖拽:drag_and_drop

6、暂停:pause

7、输入:send_keys

例如:

from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).move_to_element(ele).perform(),悬停在某个地方

# 1、找到鼠标要操作的元素
loc = (By.XPATH, '//')
ele = driver.find_element(*loc)

# 2、实例化ActionChains类
ac = ActionChains(driver)
# 3、调用鼠标行为
ac.move_to_element(ele).click(ele)
# 4、调用perform()来执行鼠标动作
ac.perform()

四、Select类,下拉框的使用

from selenium.webdriver.support.select import Select

# 初始化,找select 对象
loc = (By.XPATH, '')
select_element = driver.find_element(loc)
s = Select(select_element)
# 根据下标,value属性、文本内容来选择值
s.select_by_index(6)
time.sleep(3)
s.select_by_value('doc')
time.sleep(3)
s.select_by_visible_text('文件')

五、按键操作

element.send_keys("selenium webdriver", Keys.ENTER)

六、js+dom应用

滚动条


# js函数,元素对象.scrollIntoView()
loc = (By.XPATH, '')
a = driver.find_element(*loc)
driver.execute_script('arguments[0].scrollIntoView();', a)
# 滚动到页面底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

# 滚动到页面顶部
driver.execute_script("window.scrollTo(document.body.scrollHeight,0)")

七、上传操作

有两种情况:

1、如果是input可以直接输入路径的,那么直接调send_keys输入路径

2、非input标签的上传,则需要借助第三方工具:

2.1AutoIt我们去调用其生成的au3或exe文件

2.2SendKeys第三方库

2.3Python pywin32库,识别对话框句柄,进而操作pyautoit

总结

WebdriverWait类

switch_to 切换

Alert 处理alert弹窗

ActionChains 鼠标操作

Select ,select下拉列表

Keys 特殊键,键盘操作

js操作,滚动条

上传操作


本文转载自: https://blog.csdn.net/qq_30353203/article/details/126257639
版权归原作者 NeilNiu 所有, 如有侵权,请联系我们删除。

“Selenium-三大等待和四大操作”的评论:

还没有评论