Selenium 常用函數總結


Seleninum作為自動化測試的工具,自然是提供了很多自動化操作的函數,
下面列舉下個人覺得比較常用的函數,更多可見官方文檔:
官方API文檔:http://seleniumhq.github.io/selenium/docs/api/py/api.html

1) 定位元素

find_element_by_class_name:根據class定位
find_element_by_css_selector:根據css定位
find_element_by_id:根據id定位
find_element_by_link_text:根據鏈接的文本來定位
find_element_by_name:根據節點名定位
find_element_by_partial_link_text:根據鏈接的文本來定位,只要包含在整個文本中即可
find_element_by_tag_name:通過tag定位
find_element_by_xpath:使用Xpath進行定位
PS:把element改為elements會定位所有符合條件的元素,返回一個List
比如:find_elements_by_class_name

2) 鼠標動作

有時需要在頁面上模擬鼠標操作,比如:單擊,雙擊,右鍵,按住,拖拽等
可以導入ActionChains類:selenium.webdriver.common.action_chains.ActionChains
使用ActionChains(driver).XXX調用對應節點的行為

click(element):單擊某個節點;
click_and_hold(element):單擊某個節點並按住不放;
context_click(element):右鍵單擊某個節點;
double_click(element):雙擊某個節點;
drag_and_drop(source,target):按住某個節點拖拽到另一個節點;
drag_and_drop_by_offset(source, xoffset, yoffset):按住節點按偏移拖拽
key_down:按下特殊鍵,只能用(Control, Alt and Shift),比如Ctrl+C
ActionChains(driver).key_down(Keys.CONTROL).send_keys(‘c’).key_up(Keys.CONTROL).perform();
key_up:釋放特殊鍵;
move_by_offset(xoffset, yoffset):按偏移移動鼠標;
move_to_element(element):鼠標移動到某個節點的位置;
move_to_element_with_offset(element, xoffset, yoffset):鼠標移到某個節點並偏移;
pause(second):暫停所有的輸入多少秒;
perform():執行操作,可以設置多個操作,調用perform()才會執行;
release():釋放鼠標按鈕
reset_actions:重置操作
send_keys(keys_to_send):模擬按鍵,比如輸入框節點.send_keys(Keys.CONTROL,’a’)
全選輸入框內容,輸入框節點.send_keys(Keys.CONTROL,’x’)剪切,模擬回退:
節點.send_keys(keys.RETURN);或者直接設置輸入框內容:輸入框節點.send_keys(‘xxx’);
send_keys_to_element(element, *keys_to_send):和send_keys類似;

3) 彈窗

對應類:selenium.webdriver.common.alert.Alert

如果你觸發了某個時間,彈出了對話框,可以調用下述方法獲得對話框:
alert = driver.switch_to_alert(),然后可以調用下述方法:

accept():確定
dismiss():關閉對話框
send_keys():傳入值
text():獲得對話框文本

4)頁面前進,后退,切換

driver.switch_to_window(driver.window_handles[1])#切換窗口
driver.forward() #前進
driver.back() # 后退
#打印當前url
print(driver.current_url)

5) 頁面截圖

driver.save_screenshot(“截圖.png”)

6)設置代理

# 設置代理
from selenium import webdriver
options.add_argument("--proxy-server=http://101.37.118.54:8888")
driver_path = r'D:/chromedriver/chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path,options=options)
driver.get("http://httpbin.org/ip")

7) 頁面等待

現在的網頁越來越多采用了 Ajax技術,這樣程序便不能確定何時某個元素完全
加載出來了。如果實際頁面等待時間過長導致某個dom元素還沒出來,但是你的
代碼直接使用了這個WebElement,那么就會拋出NullPointer的異常。

為了避免這種元素定位困難而且會提高產生 ElementNotVisibleException的概率。
所以 Selenium 提供了兩種等待方式,一種是隱式等待,一種是顯式等待。

顯式等待:

顯式等待指定某個條件,然后設置最長等待時間。如果在這個時間還沒有
找到元素,那么便會拋出異常了。

from selenium import webdriver
from selenium.webdriver.common.by import By
#WebDriverWait 庫,負責循環等待

from selenium.webdriver.support.ui import WebDriverWait
#expected_conditions 類,負責條件出發

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.PhantomJS()
driver.get("http://www.xxxxx.com/loading")
try:
    # 每隔10秒查找頁面元素 id="myDynamicElement",直到出現則返回
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

如果不寫參數,程序默認會 0.5s 調用一次來查看元素是否已經生成,
如果本來元素就是存在的,那么會立即返回。

下面是一些內置的等待條件,你可以直接調用這些條件,而不用自己
寫某些等待條件了。

title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present

隱式等待:

隱式等待比較簡單,就是簡單地設置一個等待時間,單位為秒。

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.implicitly_wait(10) # seconds
driver.get("http://www.xxxxx.com/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

當然如果不設置,默認等待時間為0。

8).執行JS語句

driver.execute_script(js語句)
#比如滾動到底部:
js = document.body.scrollTop=10000
driver.execute_script(js)

9).補充

 # 找到“嵌套”的iframe
iframe = driver.find_element_by_xpath('//iframe')    
 # 切換到iframe
driver.switch_to.frame(iframe)     # 切換到iframe
獲取元素標簽的內容(文本信息):
get_attribute(‘textContent’)

獲取元素內的全部HTML:

get_attribute('innerHTML')

 

獲取包含選中元素的HTML:

get_attribute('outerHTML')

參考:https://blog.csdn.net/coder_pig/article/details/79015632


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM