web前端自动化测试(selenium3 for python3)

6、网页中等待

2020-02-03  本文已影响0人  测试星云

主要技术内容:多种等待及多窗口切换

1、定位不到可能原因?

2、等待有几种方式

driver.implicitly_wait(10)

如果页面加载上了,不需要10秒,如果页面10秒没加载完,抛异常
页面是全局的-全部加载完。
对整个driver的周期都起作用。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path='/Users/lindafang/PycharmProjects/selenium3forpython2020/driver/chromedriver'
driver = webdriver.Chrome(executable_path=path)

# 隐式等待,全局10秒
driver.implicitly_wait(10)
driver.get("https://cn.bing.com/")

elem=driver.find_element_by_id("sb_form_q")
elem.send_keys("seleniumhq"+Keys.RETURN)
assert 'selenium' in driver.page_source

# 显示等待10秒
wait = WebDriverWait(driver,10)
original_window=driver.current_window_handle
assert len(driver.window_handles)==1
driver.find_element_by_partial_link_text("selenium中文网").click()
# 等待走到切换到第二个窗口
wait.until(EC.number_of_windows_to_be(2))
# 切换到不是原来的那个窗口
for window_handle in driver.window_handles:
    print(window_handle)
    if window_handle!=original_window:
        driver.switch_to.window(window_handle)
        break

# 等待新窗口的title包含""
wait.until(EC.title_contains("selenium中文网"))
print(driver.title)
driver.close()
driver.quit()

1、验证title的,验证传入的参数title是否等于或包含在driver.title中

title_is
title_contains

2、验证元素是否出现 ,传入的参数都是元组类型的locator(By.ID,'q')

wait = WebDriverWait(driver,10)
wait.until(EC.presence_of_element_located)
wait.until(EC.presence_of_all_elements_located)

3、验证元素是否可见

wait = WebDriverWait(driver,10)
wait.until(EC.visibility_of_all_elements_located)
wait.until(EC.visibility_of_any_elements_located)
wait.until(EC.visibility_of_element_located)

4、判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value

wait = WebDriverWait(driver,10)
wait.until(EC.text_to_be_present_in_element)
wait.until(EC.text_to_be_present_in_element_value)

5、判断是否有alert出现

wait.until(EC.alert_is_present)

6、判断元素是否被选中

wait.until(EC.element_to_be_clickable)
wait.until(EC.element_to_be_selected)

附:[selenium keys模块]

Keys模块解释

NULL = '\ue000'
CANCEL = '\ue001'  # ^break
HELP = '\ue002'
BACKSPACE = '\ue003'
BACK_SPACE = BACKSPACE   #删除键
TAB = '\ue004'   #TAB键
CLEAR = '\ue005'  
RETURN = '\ue006'
ENTER = '\ue007'   #回车键
SHIFT = '\ue008'   #Shift键
LEFT_SHIFT = SHIFT
CONTROL = '\ue009'
LEFT_CONTROL = CONTROL   #Ctrl 键
ALT = '\ue00a'           #Alt 键
LEFT_ALT = ALT
PAUSE = '\ue00b'
ESCAPE = '\ue00c'   #ECS键
SPACE = '\ue00d'    #空格键 
PAGE_UP = '\ue00e'   #PgUp 键
PAGE_DOWN = '\ue00f' #PgDwon 键
END = '\ue010'    #END 键
HOME = '\ue011'   #HOME 键
LEFT = '\ue012'  #左键
ARROW_LEFT = LEFT  
UP = '\ue013'    #上键
ARROW_UP = UP   
RIGHT = '\ue014'
ARROW_RIGHT = RIGHT  #右键
DOWN = '\ue015'      #下键
ARROW_DOWN = DOWN  
INSERT = '\ue016'    #insert键 
DELETE = '\ue017'    #del键

SEMICOLON = '\ue018'  #';'键
EQUALS = '\ue019'     #'='键

#数字键盘
NUMPAD0 = '\ue01a' # number pad keys
NUMPAD1 = '\ue01b'
NUMPAD2 = '\ue01c'
NUMPAD3 = '\ue01d'
NUMPAD4 = '\ue01e'
NUMPAD5 = '\ue01f'
NUMPAD6 = '\ue020'
NUMPAD7 = '\ue021'
NUMPAD8 = '\ue022'
NUMPAD9 = '\ue023'
MULTIPLY = '\ue024' # '*' 键
ADD = '\ue025' # '+' 键
SEPARATOR = '\ue026' #','键
SUBTRACT = '\ue027' # '-' 键
DECIMAL = '\ue028' # '.'键
DIVIDE = '\ue029' #'/'键

F1 = '\ue031'  # function  keys
F2 = '\ue032'
F3 = '\ue033'
F4 = '\ue034'
F5 = '\ue035'
F6 = '\ue036'
F7 = '\ue037'
F8 = '\ue038'
F9 = '\ue039'
F10 = '\ue03a'
F11 = '\ue03b'
F12 = '\ue03c'

META = '\ue03d'
COMMAND = '\ue03d'

操作组合键:</pre>

send_keys(Keys.CONTROL,'a')   #全选(Ctrl+A)

send_keys(Keys.CONTROL,'c')   #复制(Ctrl+C)

send_keys(Keys.CONTROL,'x')   #剪切(Ctrl+X)

send_keys(Keys.CONTROL,'v')   #粘贴(Ctrl+V)

          回车键 Keys.ENTER

          删除键 Keys.BACK_SPACE

          空格键 Keys.SPACE

          制表键 Keys.TAB

          回退键 Keys.ESCAPE

          刷新键 Keys.F5
send_keys("seleniumhq"+Keys.RETURN)
send_keys(Keys.CONTROL,'a') 
上一篇 下一篇

猜你喜欢

热点阅读