WEB自动化测试(三)
等待
1、固定等待,也就是使用sleep()方法
2、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间
3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继
续执行,那么如果判断失败,就会报TimeOutExpection的异常信息。
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
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('https://www.baidu.com/')
# driver.implicitly_wait(60)
# so=WebDriverWait(
# driver=driver,timeout=10).until(
# method=es.element_to_be_clickable((By.ID,'kw')))
# so.send_keys('段舒元')
# print('输入的关键字:',so.get_attribute('value'))
# driver.quit()
显式等待
'''text_to_be_present_in_element()元素的文本资源加载出来'''
# driver=webdriver.Chrome()
# driver.maximize_window()
# driver.get('https://mail.sina.com.cn/#')
# driver.implicitly_wait(60)
# driver.find_element_by_class_name('loginBtn').click()
# time.sleep(5)
# divText=WebDriverWait(
# 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[1]/span[1]'),text_='请输入邮箱名'))
# driver.quit()
'''判断元素是否可见'''
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')
driver.implicitly_wait(60)
time.sleep(5)
about=WebDriverWait(
driver=driver,
timeout=10).until(
method=es.visibility_of_element_located((
By.LINK_TEXT,
'关于百度')))
print(about.text)
about.click()
time.sleep(5)
driver.quit()
键盘事件
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
so=driver.find_element_by_id('kw')
so.send_keys('Selenum3')
so.send_keys(Keys.CONTROL,'w')
t.sleep(5)
# 全部选择输入的关键字
so.send_keys(Keys.CONTROL,'a')
t.sleep(3)
# 然后复制
so.send_keys(Keys.CONTROL,'c')
t.sleep(3)
# 然后删除
so.send_keys(Keys.BACKSPACE)
t.sleep(3)
# 然后粘贴关键字
so.send_keys(Keys.CONTROL,'v')
t.sleep(5)
so.send_keys(Keys.F12)
t.sleep(5)
so.send_keys(Keys.F5)
t.sleep(5)
driver.quit()
js操作
# javascript全称
from selenium import webdriver
import time as t
# dricer=webdriver.Chrome()
# dricer.maximize_window()
# dricer.get('https://cn.bing.com/')
# dricer.implicitly_wait(30)
# dricer.find_element_by_id('sb_form_q').send_keys('段舒元')
# dricer.find_element_by_id('search_icon').click()
# t.sleep(10)
# t.sleep(3)
# 浏览器滑动到底部
# down='var q=document.documentElement.scrollTop=10000'
# dricer.execute_script(down)
# t.sleep(3)
# dricer.find_element_by_link_text('2').click()
# t.sleep(3)
# dricer.execute_script(down)
# t.sleep(5)
# # 浏览器滑动到顶部
# up='var q=document.documentElement.scrollTop=0'
# dricer.execute_script(up)
# t.sleep(3)
# dricer.quit()
富文本
# driver=webdriver.Chrome()
# driver.maximize_window()
# driver.get('https://uutool.cn/ueditor/')
# driver.implicitly_wait(30)
# t.sleep(3)
# driver.switch_to.frame(0)
# t.sleep(3)
# driver.find_element_by_xpath('/html/body').send_keys('段舒元')
# t.sleep(3)
# driver.quit()
'''时间控件'''
'''
那么我们需要填写时间的属性,具体解决问题的步骤为:
取消时间控件的只读属性
取消只读属性后,操作input控件的value,其实我们知道input里面输入的内容最终是在value的属性里面。
'''
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:/code/testDev/WEB%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/Time/Time/index.html')
t.sleep(3)
startTime(driver=driver,content='2000-09-15 00:00')
t.sleep(3)
endTime(driver=driver,content='2100-09-15 00:00')
t.sleep(3)
driver.get_screenshot_as_file(filename='时间控件.bmp')
driver.quit()