等待方法和常用操作

三种等待方式
- Sleep() (固定等待)
- implicitly_wait (隐式等待)
driver. implicitly_wait(100)
会自动处理等待时间,会等待页面元素加载完
- 显示等待 (等待一个元素加载后)
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()
处理常见的自动化场景
- 定位一组元素
可以用伪类、包含、以什么开头等等方式得到一组元素,并可以用循环来依次点击选中
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’)
- 层级定位(有时候一个页面要在另一个页面中点击后才能显示):
先定位父元素再定位子元素
driver.find_element().find_element()
- 跳框架
driver.switch_to.frame(‘left’)
括号内只能是框架的名字或id
有的框架id,name是动态的,可以用模糊搜索
如果没有id,name也可以先定位到这个框架再跳框架
- alert/confirm/prompt处理
alert:弹出的框
prompt:输入框
confirm:确定框
text:返回alert/confirm/prompt中的文字内容
accept:点击确认按钮
dismiss:点击取消按钮如果有取消按钮的话
send_keys:向prompt中输入文字
写法:driver.switch_to.alert.accept()
- 下拉菜单选择
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(‘芒果’) 使用可见的文本内容
- 调用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