UI自动化之等待
一、等待
1、固定等待
也就是使用sleep()方法
2、隐式等待
使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间
from selenium import webdriver
# 隐式等待 driver=webdriver.Chrome() driver.maximize_window() driver.get("http://www.baidu.com") driver.implicitly_wait(50) #最长等待时间 driver.quit()
显式等待
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait as W from selenium.webdriver.support import expected_conditions as es from selenium.webdriver.common.by import By # 显示等待 # element_to_be_clickable:元素可见时操作 driver=webdriver.Chrome() driver.maximize_window() driver.get("http://www.baidu.com") driver.implicitly_wait(50) so=W(driver=driver,timeout=10).until(method=es.element_to_be_clickable((By.ID,"kw"))) so.send_keys("风景宜人的下一句是") print("输入的关键字:",so.get_attribute("value")) driver.quit()
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait as W from selenium.webdriver.support import expected_conditions as es from selenium.webdriver.common.by import By import time # text_to_be_present_in_element()元素的文本资源加载出来 driver=webdriver.Chrome() driver.maximize_window() driver.get("https://mail.sina.com.cn/") driver.implicitly_wait(50) driver.find_element_by_class_name("loginBtn").click() time.sleep(5) divText=W(driver=driver,timeout=10).until(method=es.text_to_be_present_in_element( (By.XPATH,'/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[2]/label'),
text_="请输入邮箱名")) driver.quit()
三、
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait as W from selenium.webdriver.support import expected_conditions as es from selenium.webdriver.common.by import By import time # 判断元素是否可见 driver=webdriver.Chrome() driver.maximize_window() driver.get("http://www.baidu.com/") driver.implicitly_wait(50) time.sleep(5)
about=W(driver=driver,timeout=10).until(method=es.visibility_of_element_located((By.LINK_TEXT,"关于百度"))) print(about.text) about.click() time.sleep(5) driver.quit()
四、JS事件
#页面的滑动 from selenium import webdriver import time driver=webdriver.Chrome() driver.maximize_window() driver.get("http://www.baidu.com") driver.implicitly_wait(60) driver.find_element_by_id("kw").send_keys("鸢尾蝶") time.sleep(5) driver.find_element_by_id("su").click() time.sleep(7) #浏览器划到页面最底部 down="var q=document.documentElement.scrollTop=10000" driver.execute_script(down) time.sleep(6) #点击下一页 driver.find_element_by_link_text("下一页 >").click() time.sleep(6) #把浏览器页面滑到最底部 down="var q=document.documentElement.scrollTop=10000" driver.execute_script(down) time.sleep(6) #把浏览器滑到最顶部 up="var q=document.documentElement.scrollTop=0" driver.execute_script(up) time.sleep(5) driver.quit()
五、富文本事件
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(50) driver.get("https://uutool.cn/ueditor/") t.sleep(3) driver.switch_to.frame("ueditor_0") t.sleep(3) driver.find_element_by_xpath("/html/body").send_keys("今天要做什么呢?") t.sleep(3) driver.quit()
六、时间控件
时间控件具体为检查页面显示有readonly。为了可以操作写入。选择内容操作
那么我们需要填写时间的属性,具体解决问题的步骤为:
1.1、取消时间控件的只读属性
1.2、取消只读属性后,操作input控件的value,所以input里面输入的内容最终是在value的属性里面
from selenium import webdriver import time def startTime(driver,content): #开始时间控件 js="$(\"input[placeholder='开始时间≥当前时间']\").removeAttr('readonly');" \ "$(\"input[placeholder='开始时间≥当前时间']\").attr('value','{0}')".format(content) driver.execute_script(js) def endTime(driver,content): #结束时间控件 js="$(\"input[placeholder='结束时间>开始时间']\").removeAttr('readonly');" \ "$(\"input[placeholder='结束时间>开始时间']\").attr('value','{0}')".format(content) driver.execute_script(js) driver=webdriver.Chrome() driver.maximize_window() driver.get("file:///D:/%E5%AD%A6%E4%B9%A0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/Time/index.html") time.sleep(5) startTime(driver=driver,content="2021-01-01 12:00") time.sleep(5) endTime(driver=driver,content="2022-01-01 12:00") time.sleep(5) driver.quit()
七、当前页面截图
#把当前页面截图,在当前目录下生成一个图片。 from selenium import webdriver import time driver=webdriver.Chrome() driver.maximize_window() driver.get("http://www.baidu.com") time.sleep(6) driver.get_screenshot_as_file(filename="bd.png") time.sleep(3) driver.quit()