hello, 小伙伴們,好久不見,接下來我來給大家分享幾個比較騷的selenium操作,准備好了嗎?車門焊死,開車了。哈哈哈
1.打開兩個頁面並且進行切換操作
我們在做一些頁面的測試的時候,需要操作的是在當前頁面的基礎上再去打開一個新的頁面同時做一些操作時候,接着再切換到另一個頁面,繼續做操作,這個條件是當且僅當在當前這個driver對象里進行操作, 而不是兩個driver對象廢話不多說,代碼奉上:

1 from selenium import webdriver 2 import time 3 4 def open_windows1(): 5 driver.get('www.baidu.com') 6 time.sleep(9) 7 8 def open_windows2():# 第二個新的窗口使用JS的方法打開一個新的窗口,模擬新的標簽頁彈窗 9 new_page= window.open('www.jd.com') 10 driver.execute_script(new_page) 11 time.sleep(2) 12 13 def switch_windows(): 14 handles = driver.window_handles 15 print('print currrent opened windows:' + str(handles)) 16 while 1: 17 driver.switch_to.window(handles[0]) 18 time.sleep(5) 19 driver.switch_to.window(handles[1]) 20 time.sleep(5) 21 if __name__ == "__main__": 22 chromeOptions = webdriver.ChromeOptions() 23 chromeOptions.add_experimental_option('useAutomationExtension', False) 24 driver = webdriver.Chrome(chrome_options=chromeOptions, desired_capabilities=chromeOptions.to_capabilities()) 25 driver.maximize_window() 26 open_widows1() 27 open_wondows2() 28 switch_windows()
小伙伴們可以直接直接把這段代碼復制下來實際運行一下看看效果,當然這個driver對象大家也可以使用別的方法獲取到,是不是有點騷呢?
2.操作不可見元素
有一些元素在頁面上設置的屬性是display=none, 這時要是使用普通的xpath肯定獲取不到,這時候就要對這個頁面進行JS操作了, 即通過JS改變這個元素的可見性即通過JS來改變這個元素的屬性,接着進行操作就可以進行操作獲取值了.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <select name="new_select" id="" style="display:none"> <option value="bmw">BMW</option> <option value="audi">AUDI</option> <option value="mini">MINI</option> <option value="benz">BENZ</option> </select> </body> </html>
正常的我們想去獲取這個select選項框中的值,是獲取不到的。

1 from selenium import webdriver 2 from selenium.webdriver.support.select import Select 3 import os 4 import time 5 chromeOptions = webdriver.ChromeOptions() 6 chromeOptions.add_experimental_option('useAutomationExtension', False) 7 driver = webdriver.Chrome(chrome_options=chromeOptions, desired_capabilities=chromeOptions.to_capabilities()) 8 driver.maximize_window() 9 file_path = 'file:///' + os.path.abspath('test_display.html') 10 driver.get(file_path) 11 change_display = 'document.querySelectorAll("select")[0].style.display="block";' 12 # 這條語句就改變了這個select選項框的屬性了,接下來就能正常操作了 13 driver.execute_script(change_display) 14 sel = driver.find_element_by_tag_name('select') 15 Select(sel).select_by_value('mini') 16 time.sleep(2) 17 driver.quit()
3.定位不到彈窗元素
在selenium測試中, 看到貌似是一個簡單的彈窗,但是使用alert以及普通的定位都找不到,經過再次排查也不是iframe元素(下面我們說iframe元素),再接着是使用sleep時間也無法解決,這時我們的一個解決辦法是打印一下當前的頁面的所有窗口, 也即看看實際到了這層頁面一共有幾個窗口。
1 # 也即調用window_handles方法查看當前一共幾個窗口 2 all_handles = driver.window_handles 3 print(all_handles) 4 # 這時的結果就是這個列表有兩個元素, 也即證明當前頁面時兩個窗口,所以現在看到的是一個窗口, 實際時2個窗口了,顯示的這個元素是在另一個窗口里面,之只要我們切換到另一個窗口進行處理即可,處理完再切換回原來的窗口即可。 5 # 切換方法 6 driver.switch_to.window(all_handles[1]) 7 # 切換回原來的窗口 8 driver.switch_to.window(all_handles[0])
這個可以在我們使用alert等方法也找不到的時候嘗試一下使用這個方式,沒准就能往下進行了
4.切換到iframe元素
有的頁面我們明明可以看到,也能獲取到當前的元素,也能獲取到當前元素的id,但是就是死活定位不到,此時我們需要定位的元素很有可能包含在iframe元素中,這是我們需要進入到iframe元素里面,這樣我們就能進行操作了。
# 比如當前的iframe元素id是'frame' driver.switch_to.frame(driver.find_element_by_id('iframe') # 接着就可以進行正常操作了, # 退出當前的iframe driver.switch_to.default_content() # 這樣我們就退出iframe元素, 進行正常的操作了。
更多騷操作正在摸索中,敬請期待。。。。