天天看點

Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video

1.引言

當單擊某連結時,單擊的連結有時不是在原标簽頁上實作跳轉,而是新打開一個标簽頁。如何實作在多個視窗間進行切換呢?
現在很多網站開發都在使用HTML5,如何利用Selenium處理常用的HTML5元素。分别是canvas(畫布),video (視訊),audio (音頻)就是HTML5中常見的3個對象。本節一起來看看video(視訊)。

《Python3+Selenium3自動化測試》精品視訊課程

《全棧測試課程》精品系列課程

同步視訊知識與系列知識内容,可關注:【公衆号】:柒哥測試;【WX】:Lee-890;

2.JS處理多視窗

當單擊某連結時,單擊的連結有時不是在原标簽頁上實作跳轉,而是新打開一個标簽頁。如何實作在多個視窗間進行切換呢?

要解決該問題,可以通過修改html中元素的屬性來解決。前面的小節了解到,JS可以修改元素的readonly屬性,是以通過JS修改元素屬性,以實作多視窗的切換。

單擊Bing首頁底部的【幫助】,會打開【舉報問題】的一個新視窗,如圖所示。

Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video

::: hljs-center

多視窗

:::

多視窗的處理,隻需要修改target屬性即可。檢視【幫助】連結,會發現其target="_blank"。因為target的屬性為"_blank",是以打開連結的時候會重新打開一個新的标簽頁,如圖所示。

Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video

::: hljs-center

元素的target屬性

:::

隻要去掉target="_blank"該屬性即可實作在原标簽頁,打開連結,代碼如下:

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("https://cn.bing.com/")

sleep(2)
JS = 'document.getElementById("sb_help").target=""'
driver.execute_script(JS)
driver.find_element_by_xpath('//*[@id="sb_help"]').click()
           

3.JS處理video

現在很多網站開發都在使用HTML5,如何利用Selenium處理常用的HTML5元素。分别是canvas(畫布),video (視訊),audio (音頻)就是HTML5中常見的3個對象。本節一起來看看video(視訊)。

大多數浏覽器使用控件(如Flash)來播放視訊,但是不同的浏覽器需要使用不同的插件。HTML5定義了一個新的元素<video>,指定了一個标準的方式來嵌入電影片段,大部分浏覽器都支援該元素。

3.1. Videojs網站案例

以videojs.com為例,通路該網站速度會慢些,代碼如下:

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get("https://videojs.com")
# sleep(10)
#通過播放器的位置
video = WebDriverWait(driver, 30, 0.5).until(
    EC.presence_of_element_located((By.XPATH, '/html/body/div/div/main/div[1]/div/div/div[1]/div/video')))
#傳回播放檔案位址
url1=driver.execute_script("return arguments[0].currentSrc;",video)
print(url1)

#播放視訊
print("=====播放視訊10秒=====")
driver.execute_script("return arguments[0].play()",video)
#播放10s
sleep(10)

#暫停視訊
print("=====暫停視訊15秒=====")
driver.execute_script("arguments[0].pause()",video)
sleep(10)

#播放視訊
print("=====播放視訊20秒=====")
driver.execute_script("return arguments[0].play()",video)
sleep(20)

driver.quit()
           

3.2.鬥魚網站案例

以打開鬥魚直播首頁為例,先定位到播放器的id,然後通過js來控制播放或暫停。

from selenium import webdriver
from time import sleep
profile = webdriver.ChromeOptions()
profile.add_argument(r"user-data-dir=C:\Users\Fourme\AppData\Local\Google\Chrome\User Data")
driver=webdriver.Chrome("chromedriver",0,profile)
driver.get("https://www.douyu.com/")

# 定位播放的位置
video = driver.find_element_by_xpath("//video[@id='__video']")

#傳回檔案
url= driver.execute_script("return arguments[0].currentSrc;",video)
#播放視訊
driver.execute_script("return arguments[0].play()",video)
#播放30秒鐘
sleep(30)  #運作腳本時,等待時間需根據實際情況修訂,有可能造成代碼不能成功運作
#播放視訊

#暫停視訊
driver.execute_script("return arguments[0].pause()",video)
#暫停15秒鐘
sleep(15)   #運作腳本時,等待時間需根據實際情況修訂,有可能造成代碼不能成功運作
#播放視訊
driver.execute_script("return arguments[0].play()",video)
#播放15秒鐘
sleep(15)  #運作腳本時,等待時間需根據實際情況修訂,有可能造成代碼不能成功運作
#播放視訊

driver.quit()
           

如果你覺的文章讀的不過瘾,可以檢視詳細的視訊教程。

【2021】UI自動化測試:Selenium3自動化測試

 https://edu.51cto.com/course/26488.html

【測試全系列視訊課程】請點選我哦…

( https://edu.51cto.com/lecturer/968349.html)

學習路線如下

Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video
Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video
Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video

圖書京東、當當有售

京東: https://item.jd.com/12784287.html

當當: http://product.dangdang.com/29177828.html

Selenium3自動化測試【35】執行JS腳本(2)1.引言2.JS處理多視窗3.JS處理video

如果你覺的文章讀的不過瘾,可以檢視詳細的視訊教程。

《Python3+Selenium3自動化測試》精品視訊課程

《全棧測試課程》精品系列課程

繼續閱讀