自動化實戰例子
阿新 • • 發佈:2018-10-15
文案 lin 滾動 立即執行 default option 接收 lee click
# import nnlog
# #
# my_log = nnlog.Logger(‘dashu.log‘,when=‘D‘,backCount=5) # 日誌名稱 更新方式‘D‘時每天 backCount:最大保存數量
# # my_log.debug("debug level")
# # my_log.info("info level")
# # my_log.warning("waring level")
# # my_log.error("error level")
# from selenium import webdriver
# driver = webdriver.Chrome() # 創建瀏覽器服務
# # 請求目標網址
# driver.get(‘http://ui.imdsx.cn/uitester/‘)
# 1、發送的http請求
# selenium 是第三方提供的包
# selenium提提供了18種定位方式
# 1、id
# element = driver.find_element_by_id(‘i1‘)
# print(element)
# # 向input輸入字符串
# element.send_keys(‘1111‘)
# # 2、class定位 如果重復則取所有class中第一個
# element = driver.find_element_by_class_name(‘classname‘)
# print(element)
# element.send_keys(‘1111‘)
# # 3、css selector
# # id=‘i1‘
# # #i1
# # <input id=‘i1‘>
# # element = driver.find_element_by_css_selector(‘#i1‘)
# element = driver.find_element_by_css_selector(‘input[placeholder="請通過CSS SELECTOR定位元素"]‘)
# element = driver.find_element_by_css_selector(‘.classname‘)
# element.send_keys(‘1111‘)
# 操作滾動條
# js = ‘window.scrollTo(0,0);‘
# driver.execute_script(js)
# import time
# time.sleep(2)
# ele = driver.find_element_by_css_selector(‘#i1‘)
# # ele.send_keys(‘滾動條‘)
# 4、name的定位方式
# ele = driver.find_element_by_name(‘name‘)
# ele.send_keys(‘通過name定位‘)
# 5、通過xpath
# driver.find_element_by_xpath(‘//input[@placeholder="請通過CLASSNAME定位元素"]‘)
# 6、tag name 很不常用
# ele = driver.find_element_by_tag_name(‘input‘)
# ele.send_keys(111)
# 7、link_text
# ele = driver.find_element_by_link_text(‘跳轉大師兄博客地址‘)
# ele.click()
# 8、模糊linktext
# ele = driver.find_element_by_partial_link_text(‘大師兄博客‘)
# ele.click()
# 一共18種定位方式
# # 單數
# 1、id
# 2、class
# 3、name
# 4、css *************
# 5、xpath *************
# 6、linktext
# 7、模糊linktext
# 8、tagname
# 復數8種 所有復數形式的定位 都會返回列表 無論列表中是一個元素 還是多個元素
# eles = driver.find_elements_by_class_name(‘classname‘)
# print(eles)
# eles[0].send_keys(‘111‘)
# 留個作業 ---自己回去把8種復數 都練習一下
# 還有2種是上面16種的抽象方法
# 獲取當前瀏覽器大小
# 下午:
# from selenium import webdriver
# driver = webdriver.Chrome() # 創建瀏覽器服務
# # 請求目標網址
# driver.get(‘http://ui.imdsx.cn/uitester/‘)
#
# # 獲取瀏覽器的大小
# # print(driver.get_window_size())
# # # 最大化瀏覽器
# # driver.maximize_window()
# # 設置瀏覽器大小
# # driver.set_window_size(500,500)
# # **** 獲取當前瀏覽器tag的指針
# print(‘點擊前---> %s‘%driver.current_window_handle)
#
# # **** 獲取瀏覽器所有的tag指針
# print(‘點擊前---> %s‘%driver.window_handles)
#
# # 1、打開uitester的頁面
# # 2、打印一下 當前的指針和所有指針
#
# # 3、定位新建標簽頁面的元素 並點擊
# driver.maximize_window()
# js = ‘window.scrollTo(0,0);‘
# driver.execute_script(js)
# import time
# time.sleep(2)
# driver.find_element_by_css_selector(‘a[href="/new-index/"]‘).click()
# # 4、在打印一次當前的指針和所有指針 作對比
# # **** 獲取當前瀏覽器tag的指針
# print(‘點擊後---> %s‘%driver.current_window_handle)
#
# # **** 獲取瀏覽器所有的tag指針
# print(‘點擊後---> %s‘%driver.window_handles)
# 截圖 3種截圖 用as file就可以了
# driver.get_screenshot_as_file(‘tupian1.png‘)
# 關閉和退出
# driver.maximize_window()
# js = ‘window.scrollTo(0,0);‘
# driver.execute_script(js)
# import time
# time.sleep(2)
# driver.find_element_by_css_selector(‘a[href="/new-index/"]‘).click()
# time.sleep(5)
# driver.quit()
# 退出驅動
# driver.quit()
# 關閉當前指針(句柄)
# driver.close()
# element 的操作
# ele = driver.find_element_by_css_selector(‘#i1‘)
# ele.send_keys(‘元素操作‘)
# import time
# time.sleep(2)
# # 清除input的文案
# ele.clear()
# 判斷元素是否可見
# 判斷元素是否勾選
# on = driver.find_element_by_css_selector(‘#on‘)
# off = driver.find_element_by_css_selector(‘#off‘)
# print(on.is_selected())
# print(off.is_selected())
# switch ****************
# switch windows
from selenium import webdriver
driver = webdriver.Chrome() # 創建瀏覽器服務
# 請求目標網址
driver.get(‘http://ui.imdsx.cn/uitester/‘)
driver.maximize_window()
js = ‘window.scrollTo(0,0);‘
driver.execute_script(js)
import time
time.sleep(2)
# driver.find_element_by_css_selector(‘a[href="/new-index/"]‘).click()
# # 賦值handles
# handles=driver.window_handles
# print(‘點擊後---> %s‘%handles)
# # 切換前打印當前的handle
# print(‘切換前的handle-->: %s‘%driver.current_window_handle)
# # 切換到最新打開的頁面 劃橫線代表當前的api調用方式已經過時
# # driver.switch_to_window(handles[1])
# # driver.switch_to.window(handles[1])
# # 切換後再打印當前的handle
# print(‘切換後的handle-->: %s‘%driver.current_window_handle)
# # 像新建的tab頁面的元素sendkeys
# driver.find_element_by_css_selector(‘#newtag‘).send_keys(‘切換tab‘)
# 切換iframe ************************
# # 先在默認打開的頁面定位元素 並sendkeys
# driver.find_element_by_css_selector(‘#i1‘).send_keys(‘沒切換iframe‘)
# # 切換iframe
# # driver.switch_to_frame()
# driver.switch_to.frame(‘top-frame‘)
#
# # 切換完iframe後 在操作frame裏面的元素
# driver.find_element_by_css_selector(‘#newtag‘).send_keys(‘切換後newtag的html‘)
#
# # 切換進 百度的iframe
# driver.switch_to.frame(‘baidu-frame‘)
#
# # 定位百度的輸入框 並操作
# driver.find_element_by_css_selector(‘#kw‘).send_keys(‘水瓶座‘)
#
# # # 一次直接跳到最外層或者說是跳到默認層
# # driver.switch_to.default_content()
# #
# # # 清掉id為i1的元素value
# # driver.find_element_by_css_selector(‘#i1‘).clear()
#
# # 返回到當前html的上層
# driver.switch_to.parent_frame()
# # 清掉new的value
# driver.find_element_by_css_selector(‘#newtag‘).clear()
#
# # 返回到當前html的上層
# driver.switch_to.parent_frame()
# # 清掉id為i1的value
# driver.find_element_by_css_selector(‘#i1‘).clear()
# iframe 如果沒有name字段則可以 通過find 先定位iframe 在切換
# 先在默認打開的頁面定位元素 並sendkeys
# driver.find_element_by_css_selector(‘#i1‘).send_keys(‘沒切換iframe‘)
# # 切換iframe
# # driver.switch_to_frame()
# # driver.switch_to.frame(‘top-frame‘)
# iframe = driver.find_element_by_css_selector(‘[src="/new-index/"]‘)
# driver.switch_to.frame(iframe)
#
# # 切換完iframe後 在操作frame裏面的元素
# driver.find_element_by_css_selector(‘#newtag‘).send_keys(‘切換後newtag的html‘)
# alert
# driver.find_element_by_css_selector(‘#alert‘).click()
# confirm
# driver.find_element_by_css_selector(‘#confirm‘).click()
# # # 取消
# # driver.switch_to.alert.dismiss()
# 確認
# driver.switch_to.alert.accept()
# select **
# from selenium.webdriver.support.select import Select
# driver.maximize_window()
# js = ‘window.scrollTo(0,1800);‘
# driver.execute_script(js)
# import time
# time.sleep(2)
# sele = driver.find_element_by_xpath(‘//select[1]‘)
# print(sele)
# Select(sele).select_by_value(‘4‘)
# 先接收select標簽
# 在拼接option的css 定位方式
# 在select標簽中找符合條件的標簽
# 判斷一下他是否被選中
# 沒選中則 在點擊一次
# 鼠標懸浮操作
# 1、從業務角度來說 完全模擬業務
from selenium.webdriver.common.action_chains import ActionChains
# div = driver.find_element_by_css_selector(‘#a‘)
# 隱藏的單擊按鈕
# clickButton = driver.find_element_by_css_selector(‘#dis1‘)
# 判斷他是否可見
# print(‘懸浮前:%s‘%clickButton.is_displayed())
# 每次調用一個函數 都不是立即執行,而是存到列表中 統一通過perform一起執行
# ActionChains(driver).move_to_element(div).click(clickButton).perform()
# print(‘懸浮後:%s‘%div.is_displayed())
# 2、暴力破解 直接將display none幹掉
# js = "document.getElementById(‘dis1‘).style.display=‘‘;"
# driver.execute_script(js)
# time.sleep(1)
# clickButton = driver.find_element_by_css_selector(‘#dis1‘)
# clickButton.click()
# 拼圖
# s1 = driver.find_element_by_css_selector(‘#dragger‘)
# t1 = driver.find_element_by_css_selector(‘#i1‘)
# ActionChains(driver).drag_and_drop(s1,t1).perform()
# ******************* 等待 ******************************
# 1、time 固定等待 無論你是否出現了 他都等那麽久 最傻的一種
# import time
# time.sleep(2)
# 2、隱士等待 不夠穩定 一般傻用這個
# driver.implicitly_wait(10)
# 3、顯示等待 聰明人用這個
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# ele = WebDriverWait(driver,10,0.2).until(EC.visibility_of_element_located((By.CSS_SELECTOR,‘#i1‘)))
# ele.send_keys(1111)
m = EC.visibility_of_element_located((By.CSS_SELECTOR,‘#i11‘))
res = WebDriverWait(driver,10,0.5).until(m)
res.send_keys(1111)
自動化實戰例子