等待方法和常用操作

laobu666 0

三种等待方式

  1. Sleep() (固定等待)

 

  1. implicitly_wait (隐式等待)

driver. implicitly_wait(100)

会自动处理等待时间,会等待页面元素加载完

 

  1. 显示等待 (等待一个元素加载后)

WebDriverWait()

 

# WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exception=None)

# driver  驱动对象

# timeout  超时时间

# poll_frequency  隔多少秒刷新,默认0.5s

# ignore_exceptions  超时后的异常信息,默认情况下抛NoSuchElementException

 

示例:

ele=WebDriverWait(driver,10).until(lambda x:x.find_element(By.CSS_SELECTOR,’#hao123-govsite > div > a:nth-child(2)’))

until里面写的是找到某个元素

 

封装:class e:

@staticmethod

def wait(dri,tim,a):

ele=WebDriverWait(dri, tim).until(

lambda x: x.find_element(By.CSS_SELECTOR, a))

return ele

 

e.wait(driver,10,’#hao123-govsite > div > a:nth-child(2)’).click()

 

处理常见的自动化场景

  1. 定位一组元素

可以用伪类、包含、以什么开头等等方式得到一组元素,并可以用循环来依次点击选中

driver.get(‘file:///E:/%E6%96%B0%E6%A2%A6%E6%83%B3/element_samples.html’)

driver.maximize_window()

driver.implicitly_wait(5)

ee = driver.find_elements(By.TAG_NAME,’input’)

for i in ee:

if i.get_attribute(‘type’) == “checkbox”:

i.click()

 

封装:class too:

@staticmethod

def all(locate):

elem=driver.find_elements(By.TAG_NAME,locate)

driver.implicitly_wait(5)

for i in elem:

if i.get_attribute(‘type’) == “checkbox”:

i.click()

too.all(‘input’)

 

  1. 层级定位(有时候一个页面要在另一个页面中点击后才能显示):

先定位父元素再定位子元素

driver.find_element().find_element()

 

  1. 跳框架

driver.switch_to.frame(‘left’)

括号内只能是框架的名字或id

 

有的框架id,name是动态的,可以用模糊搜索

如果没有id,name也可以先定位到这个框架再跳框架

 

  1. alert/confirm/prompt处理

alert:弹出的框

prompt:输入框

confirm:确定框

 

text:返回alert/confirm/prompt中的文字内容

accept:点击确认按钮

dismiss:点击取消按钮如果有取消按钮的话

send_keys:向prompt中输入文字

 

写法:driver.switch_to.alert.accept()

 

  1. 下拉菜单选择

from selenium.webdriver.support.select import Select

ele=driver.find_element(By.CSS_SELECTOR,’#Selector’)

s=Select(ele)

s.select_by_index(2)     使用索引位置选择

time.sleep(2)

s.select_by_value(‘grape’)     使用value属性的值

time.sleep(2)

s.select_by_visible_text(‘芒果’)    使用可见的文本内容

 

  1. 调用js

driver.execute_script(“alert(123)”)

括号内写js脚本

 

弹窗:driver.execute_script(“alert(123)”)

 

对找到的元素进行样式改变

e=driver.find_element(By.CSS_SELECTOR,’body > center > p:nth-child(3) > table > tbody > tr:nth-child(2) > td:nth-child(2)’)

driver.execute_script(‘arguments[0].style.border=”5px solid red”‘,e)

 

滚动条操作

driver.execute_script(‘document.body.scrollTop=100’)

滚到最下面

driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)

 

修改元素的文本内容

js=’document.querySelector(“#submit”).textContent=”提交”‘

这里的括号里面的是检查器里面复制的jspath


发表回复