日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

web自动化:web控件交互操作/多窗口处理/网页frame

發布時間:2023/12/16 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web自动化:web控件交互操作/多窗口处理/网页frame 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

序:web自動化,除了需要定位網頁元素外,在定位到元素后,一般都需要執行一系列操作,最常用的就是單擊click,另外還包括輸入文件、右鍵點擊,頁面滑動,表單操作等

selenium webdriver api指導文檔:

https://selenium-python.readthedocs.io/api.html

selenium提供的操作接口:

ActionChains:執行PC端的鼠標點擊,雙擊,右鍵,拖拽等操作

TouchActions:模擬PC和移動端的點擊,滑動,拖拽,多點觸控等多種手勢操作

ActionChains用法:

包含的一些基本操作:

click(on_element=None):模擬左鍵點擊,如果不傳入element,那么點擊鼠標當前位置

click_and_hold(on_element=None):點擊并不釋放

context_click(on_element=None):模擬右鍵點擊

double_click(on_element=None):模擬雙擊

drag_and_drop(source, target):拖動然后移動到另外一個位置放下,傳入兩個元素,第一個元素位置和第二個元素位置

key_down(value, element=None)

key_up(value, element=None)

ActionChains執行原理

調用ActionChains的方法時,不會立即執行,而是將所有的操作,按順序存放在一個隊列里,當調用perform()方法時,才會以此執行 基本用法: 1、生成一個動作action = ActionChains(driver) 2、添加動作方法1 action.方法1 3、添加動作方法2 action.方法2 4、調用action.perform()方法執行 具體寫法: 1、鏈式寫法 ActionChains(driver).move_to_element(element).click(element).perform() 2、分布寫法 action = ActionChains(driver) action.move_to_element(element) action.click(element) action.perform()

1、模擬點擊、右鍵、雙擊等操作

element_click = self.driver.find_element_by_xpath('xpath')element_doubleclick = self.driver.find_element_by_xpath('xpath')element_rightclick = self.driver.find_element_by_xpath('xpath')action = ActionChains(self.driver)action.click(element_click)action.double_click(element_doubleclick)action.context_click(element_rightclick)sleep(3)action.perform()

2、模擬鼠標移動到某個元素上

def test_movetoelement(self):self.driver.get("https://www.baidu.com/")self.driver.maximize_window()element = self.driver.find_element_by_xpath('//*[@id="u1"]/span')action = ActionChains(self.driver)action.move_to_element(element)action.perform()sleep(5)

3、模擬按鍵

模擬按鍵方法有多種:1、用win32api來實現 2、能用SendKeys來實現 3、能用selenium的webelement對象的send_keys()方法實現 4、ActionChains類也提供了幾個模擬按鍵的方法 ActionChains用法介紹 1、action = ActionChains(self.driver) 2、action.send_keys(Keys.BACK_SPACE) 3、或者action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL) 4、action.perform() self.driver.get()element = self.driver.find_element_by_xpath("")element.click()action = ActionChains(self.driver)action.send_keys("username").pause(1)action.send_keys(Keys.SPACE).pause(1)action.send_keys("tom").pause(1)action.send_keys(Keys.BACK_SPACE).perform()

TouchActions用法:

官網文檔:

https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html?highlight=touchactions

TouchAction類似與ActionChains,ActionChains只是針對PC端程序鼠標模擬的一系列操作,對h5頁面操作是無效的 TouchAction可以對h5頁面操作,可以實現點擊、滑動、多點觸控、以及模擬手勢的各種操作 手勢控制: tap---在指定元素上單擊 double_tap---在指定元素上雙擊 tap_and_hold---在指定元素上點擊但不釋放 move---手勢移動指定偏移(不釋放) release---釋放手勢 scroll---手勢點擊并滾動 scroll_form_element---從某個元素位置開始手勢點擊并滾動(向下滑動為負數,向上滑動為正數) long_press---長按元素 flick---手勢滑動 flick_element---從某個元素位置開始手勢滑動(向上滑動為負數,向下滑動為正數) perform---執行 class TestTouchActions:def setup(self):option = webdriver.ChromeOptions()option.add_experimental_option('w3c', False)self.driver = webdriver.Chrome(options=option)self.driver.implicitly_wait(5)self.driver.maximize_window()def teardown(self):self.driver.quit()def test_touchactions_scrollbutton(self):'''打開百度網頁在搜索框中輸入‘selenium’滑動到底部,點擊下一頁按鈕關閉chorme瀏覽器'''self.driver.get("https://www.baidu.com")ele = self.driver.find_element_by_id('kw').send_keys('selenium')ele_su = self.driver.find_element_by_id('su')action = TouchActions(self.driver)action.tap(ele_su)action.perform()# 滑動到底部action.scroll_from_element(ele_su, 0, 10000).perform()sleep(2)

表單操作

表單時一個包含表單元素的區域,是允許用戶在表單中(如文本域、下拉列表、單選框、復選框等)輸入信息的元素

表單使用表單標簽(<form>)定義,例如 :<form><input/></form>

操作表單元素的步驟:

1、定位到表單元素

2、操作元素:清空,輸入或者點擊等

多窗口處理

當我們在網頁上點擊一個按鈕,如果新開一個網頁窗口去實現頁面跳轉,然后需要在新頁面上操作,這種情況該如何處理

想在新頁面上操作,就得先切換窗口,獲取窗口的唯一標識用句柄表示,所以只需要切換句柄,就可以在多個頁面靈活操作

多窗口處理方法:

1、先獲取到當前的窗口句柄:driver.current_window_handle

2、再獲取到所有窗口的句柄:driver.window_handles

3、判斷是否是想要操作的窗口,如果是,就可以對窗口進行操作,如果不是,跳轉到另外一個窗口:driver.switch_to.window,對另一個窗口進行操作

多窗口切換案例:打開百度頁面,點擊登錄,在彈框中點擊立即注冊(打開一個新頁面,在用戶名處輸入username),返回剛才的登錄頁面,點擊用戶名登錄

def test_windows(self):self.driver.get("https://www.baidu.com/")self.driver.find_element_by_xpath('//*[@id="u1"]/a').click()print(self.driver.current_window_handle)self.driver.find_element_by_link_text('立即注冊').click()print(self.driver.window_handles)print(self.driver.current_window_handle)windows = self.driver.window_handlesself.driver.switch_to.window(windows[1])self.driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("username")sleep(3)self.driver.switch_to.window(windows[0])self.driver.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn').click()sleep(3)

網頁frame處理

當一個網頁里面有多個html頁面組成時,比如網頁內嵌,這時就會有多個frame,這種場景又該如何處理

在web自動化中,如果一個元素定位不到,那么很大可能是在iframe中

什么是frame:frame是html中的框架,在html中,所謂的框架就是可以在同一個瀏覽器中顯示不止一個頁面,基于html的框架,又分為垂直框架和水平框架(cols,rows)

frame分類:

frame標簽包含frameset、frame、iframe三種,frameset和普通的標簽一樣,不會影響元素定位

而frame與iframe對selenium定位而言是一樣的,selenium有一組方法可以對frame進行操作

frame的存在方式有兩種:一種是嵌套的,一種是不嵌套的

切換frame:

driver.switch_to.frame()? 根據元素id或者index切換frame

driver.switch_to.default_content()? 切換到默認frame

driver.switch_to.parent_frame()? 切換到父級frame

處理未嵌套的iframe:

driver.switch_to.frame(frame_id)

driver.switch_to.frame(frame_index) frame無id的時候根據索引來處理,索引從0開始,driver.switch_to_frame(0)

處理嵌套的iframe:

對于嵌套的先進入iframe的父節點,再進到子節點,然后可以對子節點里面的對象進行處理和操作

driver.switch_to.frame("父節點")

driver.switch_to.frame("子節點")

?

?

?

?

總結

以上是生活随笔為你收集整理的web自动化:web控件交互操作/多窗口处理/网页frame的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。