已知元素定位、擷取元素文本
說明:有時需要擷取元素的文本值,做斷言比較,則可以使用元素的text屬性
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
element = driver.find_element_by_xpath("//a[@href='http://news.baidu.com']")
text = element.text
print(text)
driver.quit()
# 列印結果:新聞
已知元素定位、擷取元素其他屬性
有時元素沒有text屬性(HTML标簽之間的文本值);
而是通過value展示文本值的(通過HTML的value屬性名實作文本值);
那麼可以擷取其它屬性方法: get_attribute("屬性") ,這裡的屬性參數可以是 class、name、value等元素包括的任意屬性名。
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
element = driver.find_element_by_id("su")
text = element.get_attribute("value")
print(text)
driver.quit()
# 列印結果:百度一下
已知元素定位、擷取元素标簽名
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
element = driver.find_element_by_id("su")
print(element.tag_name)
driver.quit()
# 列印結果:input
擷取浏覽器名字
方法:name
執行個體:drvier.name
擷取浏覽器目前頁面title
方法:driver.title
執行個體:driver.title
擷取整個頁面元素
print(browser.page_source)
擷取目前頁面的url
方法:current_url
執行個體:driver.current_url
說明:在python自動化測試中,擷取頁面位址使用 current_url() 擷取目前頁面位址;
但在原頁面上點選某個按鈕打開了一個新頁面,如果想要擷取新頁面的url位址就不能隻是使用 current_url() 方法,因為此時該方法擷取到的位址還是原頁面位址。
例如:
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http:/www.baidu.com')
# 跳轉到新頁面
driver.find_element_by_link_text('新聞').click()
t.sleep(3)
print('目前浏覽位址為:.{0}'.format(driver.current_url)) # 目前浏覽器位址為:www.baidu.com
driver.quit()
添加定位頁面代碼之後再使用 current_url() 擷取新頁面的位址即可。
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http:/www.baidu.com')
# 跳轉到新頁面
driver.find_element_by_link_text('新聞').click()
#切換目前頁面标簽
driver.switch_to.window(driver.window_handles[1])
t.sleep(3)
print('目前浏覽位址為:.{0}'.format(driver.current_url)) # 目前浏覽器位址為:http://news.baidu.com
driver.quit()
已知元素定位、擷取元素坐标位置
driver = webdriver.Firefox()
element = driver.find_element_by_xpath("//someXpath")
location = element.location
print(location) # {'y': 202, 'x': 165}
已知元素定位、擷取元素大小
driver = webdriver.Firefox()
element = driver.find_element_by_xpath("//someXpath")
location = element.location
size = element.size
print(size) # {'width': 77, 'height': 22}
表單的送出
方法:submit
解釋:查找到表單(form)直接調用submit即可
執行個體:driver.find_element_by_id("form1").submit()
已知元素定位、擷取元素CSS的屬性值
方法:value_of_css_property(css_name)
執行個體:driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")
已知元素定位、擷取元素的tagName(元素标簽名)
方法:tag_name
執行個體:driver.find_element_by_id("iptUsername").tag_name
傳回值:定位的元素的标簽名 如p div标簽
删除浏覽器所有的cookies
方法:delete_all_cookies()
執行個體:driver.delete_all_cookies()
删除浏覽器指定的cookies
方法:delete_cookie(name)
執行個體:deriver.delete_cookie("my_cookie_name")
傳回目前會話中的cookies
方法:get_cookies()
執行個體:driver.get_cookies()
根據cookie name 查找映射Value值
方法:driver.get_cookie(cookie_name)
執行個體:driver.get_cookie("NET_SessionId")
關閉目前浏覽器頁面(浏覽器驅動并未殺死)
方法:close() 指目前頁面
執行個體:driver.close()
關閉浏覽器并且退出驅動程式(殺死浏覽器驅動)
方法:quit()
執行個體:driver.quit()
浏覽器回退操作
方法:back()
執行個體:driver.back()
清空輸入框操作
方法:clear()
執行個體:執行個體:driver.find_element_by_id("iptUsername").clear()
浏覽器視窗最大化
方法:maximize_window()
執行個體:driver.maximize_window()
浏覽器設定視窗大小
browser.set_window_size(300,300)
擷取目前浏覽器視窗的坐标
方法:get_window_position()
執行個體:driver.get_window_position()
擷取目前浏覽器視窗的長和寬(擷取浏覽器視窗大小)
方法:get_window_size()
執行個體:driver.get_window_size()
切換浏覽器視窗
# 切換不同的tab頁
方法:driver.switch_to.window(window_name)
# 備注:從A頁跳轉到B頁,句柄已經切換過去,但是焦點沒有切過去,是以需要switch_to.window,把焦點也切過去,才可以在目前頁進行操作。
# 切換是思路,擷取所有的句柄,因為傳回是一個list,而且要切換的對象都是最後一個,可以使用[-1]直接切過去
# 例如:
driver.switch_to.window(driver.window_handles[-1])
傳回最外層表單
方法: driver.switch_to_default_content() # 舊方法
driver.switch_to.default_content() # 新方法
切換至指定frame架構中
方法:driver.switch_to.frame('xxx')
執行個體:
driver.switch_to.frame('frame_name')
driver.switch_to.frame(index)
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
滑鼠焦點切換到浏覽器中的彈窗
方法:driver.switch_to_alert()
執行個體:driver.switch_to_alert()
浏覽器前進
方法:
driver.forward()
浏覽器後退
browser.back()
重新整理浏覽器頁面
方法:driver.refresh()
浏覽器警告框處理
執行個體1
"""警告框處理"""
# 擷取警告框文本資訊
AlertText = driver.switch_to.alert.text
print(AlertText)
# 模拟點選确定操作
driver.switch_to.alert.accept()
# 模拟點選取消操作
driver.switch_to.alert.dismiss()
執行個體2
try:
tt = browser.switch_to_alert()
print("列印警告框提示...")
except Exception as e:
print("faild")
success_text = tt.text
print(success_text)
tt.accept()
去除頁面元素的隻讀屬性(readonly)
"""去除隻讀屬性"""
#執行個體12306,日期選擇
# 移除readonly屬性
js_readonly = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js_readonly)
# 清空 開始日期
# driver.find_element_by_id("train_date").clear()
# 輸入新的日期
# driver.find_element_by_id("train_date").send_keys("2020-05-01")
頁面input框利用send_keys上傳圖檔
#F:\dd.jpg 為本地圖檔路徑
driver.find_element_by_id("file_select").send_keys("F:\dd.jpg")
複選框操作
Len()方法可以用來計算元素的個數
click()方法是對某個元素進行勾選;
pop().click(),其實是對某個元素取消勾選
如果隻想勾選一組元素中的某一個該如何操作呢?
pop()或pop(-1): 預設擷取一組元素中的最後一個。
pop(0): 預設擷取一組元素中的第一個。
pop(1): 預設擷取一組元素中的第二個。
這樣就可以操作這一組元素中的任意一個元素了,隻需數一數需操作的元素是這一組中的第幾個。
滾動條操作
"""浏覽器滾動條并沒有提供相應的操作方法。在這種情況下,就可以借助JavaScript來控制浏覽器的滾動條。 WebDriver提供了execute_script()方法來執行JavaScript代碼。"""
js="window.scrollTo(0,2500);" #0為起始,2500為終點
driver.execute_script(js)
js = 'window.scrollTo(0,document.body.scrollHeight)' # 滾動到浏覽器底部
driver.execute_script(js)
time.sleep(2)
js = 'window.scrollTo(0,document.body.scrollTop=0)' # 滾動到浏覽器頂部
driver.execute_script(js)
元素聚焦
"""雖然用上面的方法可以解決拖動滾動條的位置問題,但是有時候無法确定我需要操作的元素在什麼位置,有可能每次打開的頁面不一樣,元素所在的位置也不一樣,怎麼辦呢?這個時候我們可以先讓頁面直接跳到元素出現的位置,然後就可以操作了。同樣需要借助JS去實作。"""
target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)
設定網絡
print(browser.set_network_conditions(
offline=False,
latency=5, # additional latency (ms)
download_throughput=500 * 1024, # maximal throughput
upload_throughput=500 * 1024) # maximal throughput)
)
指定浏覽器驅動位置(或者将驅動設定為環境變量)
from selenium import webdriver
browser = webdriver.Chrome(executable_path="/Users/xinxi/PycharmProjects/selenium_demo/webdriver/chromedriver_mac")
# executable_path來指定chromedirver路徑
browser.get('https://www.baidu.com')
儲存截圖(截取目前浏覽器頁面頁面)
browser.save_screenshot("/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截圖.png")
圖檔流截圖(截取目前浏覽器頁面頁面)
sc_str = browser.get_screenshot_as_png()
sc_path = "/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截圖.png"
with open(sc_path,"w") as f:
f.write(sc_str)
base_64截圖(截取目前浏覽器頁面頁面)
sc_str = browser.get_screenshot_as_base64()
html_tmp = """
<html>
<body>
<h1>這是一個截圖</h1>
<img src="data:image/png;base64,{}"/>
</body>
</html>
""".format(sc_str)
html_path = "/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截圖.html"
with open(html_path,"w") as f:
f.write(html_tmp)
效果如下: