最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript在web自動化測試中的作用示例詳解

 更新時間:2019年08月25日 10:12:11   作者:linux超  
這篇文章主要給大家介紹了關(guān)于JavaScript在web自動化測試中的作用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

JS的全稱JavaScript,是一種運(yùn)行在瀏覽器中的解釋型腳本語言,通常用來實(shí)現(xiàn)web前端頁面的基本功能,對于前端開發(fā)人員是不得不掌握的一門基本技能,但是對于做web自動化測試的人員來說,如果為了實(shí)施自動化測試專門研究JS的腳本語法不僅浪費(fèi)時間,也偏離了我們的工作重心,所以今天就給大家總結(jié)一下,在web自動化測試中常用的一些JS腳本,只要掌握這些腳本的使用,無需再為專門學(xué)習(xí)js腳本而花費(fèi)太多時間,優(yōu)秀程序員的素質(zhì)是什么?有現(xiàn)成的直接用,絕不浪費(fèi)時間自己寫!^_^ 開玩笑的,俗話說技多不壓身,多掌握一門技能,只有好處沒壞處。正文開始!

窗口滾動

用途:滑動web頁面

def scrollTo(x, y):
 js = """
 window.scrollTo("{x}", "{y}")
 """.format(x=x, y=y)
 driver.execute_script(js)

參數(shù)說明

x:屏幕向右移動的距離

y:屏幕向下移動的距離

移除屬性

用途:以下方法可以刪除元素的任何屬性,主要用來移除時間控件的readonly屬性

def remove_attribute(css, attribute, index=0):
 js = """
 var element = document.querySelectorAll("{css}")[{index}];
  element.removeAttribute("{attr}");
 """.format(css=css, index=index, attr=attribute)
 driver.execute_script(js)

參數(shù)說明

css::css表達(dá)式

index:索引值,默認(rèn)0,標(biāo)識第一個元素

attribute:元素的某個屬性,比如readonly,value,name等

高亮元素

用途:方便用戶查看當(dāng)前操作的是哪個頁面元素,也方便測試人員定位問題

def height_light(css, index=0):
 js = """
 var element = document.querySelectorAll("{css}")[{index}];
  element.style.border="2px solid red";
 """.format(css=css, index=index)
 driver.execute_script(js)

參數(shù)說明

css:css表達(dá)式

index:索引值,默認(rèn)0,標(biāo)識第一個元素

點(diǎn)擊元素

用途:由于web自動化的最大問題就是穩(wěn)定性比較差,有些時候使用selenium無法點(diǎn)擊元素,因此我們可以使用JS實(shí)現(xiàn)元素的點(diǎn)擊操作

def click(css, index=0):
 js = """var element = document.querySelectorAll("{css}")[{index}];
    element.click();""".format(css=css, index=index)
 driver.execute_script(js)

參數(shù)說明

css:css表達(dá)式

index:索引值,默認(rèn)0,標(biāo)識第一個元素

清除輸入框內(nèi)容

用途:用來清除輸入框的內(nèi)容

def clear(css, index=0):
 js = """var element = document.querySelectorAll("{css}")[{index}];
    element.value = "";""".format(css=css, index=index)
 driver.execute_script(js)

參數(shù)說明

css:css表達(dá)式

index:索引值,默認(rèn)0,標(biāo)識第一個元素

輸入內(nèi)容

用途:輸入框中輸入內(nèi)容

def input(self, css, value, index=0):
 js = """var element = document.querySelectorAll("{css}")[{index}];
    element.value = "{value}";""".format(css=css, index=index, value=value)
 driver.execute_script(js)

參數(shù)說明

css:css表達(dá)式

value:待輸入的數(shù)據(jù)

index:索引值,默認(rèn)0,標(biāo)識第一個元素

說明

以上所有的JS操作,還可以結(jié)合selenium中的WebElement按照以下方式實(shí)現(xiàn),因?yàn)镴S中查找元素的方法有限,比如xpath定位,在js中不存在

如滾動頁面

def scrollTo(self, element, x, y):
 js = """
 arguments[0].scrollTo("{}", "{}")
 """.format(x, y)
 driver.execute_script(js, element)

參數(shù)說明

element:通過selenium中的定位方法查找到的WebElement元素對象

arguments[0]:代表execute_script()方法的第二個參數(shù)

測試代碼

我們簡單的寫個測試腳本來測試一下以上JS腳本是否能夠順利執(zhí)行

js_element.py

"""
------------------------------------
@Time : 2019/8/23 19:00
@Auth : linux超
@File : js_element.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""


class CssElement(object):

 driver = None

 def __init__(self, css, index=None, describe=None):
  self.css = css
  if index is None:
   self.index = 0
  else:
   self.index = index
  self.desc = describe

 def __get__(self, instance, owner):
  if instance is None:
   return None
  global driver
  driver = instance.driver
  return self

 def clear(self):
  """
  清除內(nèi)容
  """
  js = """var elm = document.querySelectorAll("{css}")[{index}];
     elm.style.border="2px solid red";
     elm.value = "";""".format(css=self.css, index=self.index)
  driver.execute_script(js)

 def input(self, value):
  """
  輸入內(nèi)容
  """
  js = """var elm = document.querySelectorAll("{css}")[{index}];
     elm.style.border="2px solid red";
     elm.value = "{value}";""".format(css=self.css, index=self.index, value=value)
  driver.execute_script(js)

 def click(self):
  """
  點(diǎn)擊元素
  """
  js = """var elm = document.querySelectorAll("{css}")[{index}];
     elm.style.border="2px solid red";
     elm.click();""".format(css=self.css, index=self.index)
  driver.execute_script(js)

 def remove_attribute(self, attribute):
  """
  刪除某個元素的屬性,比如日期空間的readonly屬性
  """
  js = """
  var elm = document.querySelectorAll("{css}")[{index}];
   elm.removeAttribute("{attr}");
  """.format(css=self.css, index=self.index, attr=attribute)
  driver.execute_script(js)

 @staticmethod
 def remove_attr(element, attribute):
  js = """
  arguments[0].removeAttribute("{attr}");
  """.format(attr=attribute)
  driver.execute_script(js, element)

 @staticmethod
 def scrollTo(x, y):
  js = """
  window.scrollTo("{}", "{}")
  """.format(x, y)
  driver.execute_script(js)

 @staticmethod
 def window_scroll(element, x, y):
  js = """
  arguments[0].scrollTo("{}", "{}")
  """.format(x, y)
  driver.execute_script(js, element)

 def height_light(self):
  js = """
  var element = document.querySelectorAll("{css}")[{index}];
   element.style.border="2px solid red";
  """.format(css=self.css, index=self.index)
  driver.execute_script(js)

 @staticmethod
 def height_lig(element):
  js = """
  arguments[0].style.border="2px solid red";
  """
  driver.execute_script(js, element)


if __name__ == '__main__':
 pass

用例

test_js.py

"""
------------------------------------
@Time : 2019/8/22 16:51
@Auth : linux超
@File : test_js.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import time
from selenium.webdriver.remote.webdriver import WebDriver
import unittest
from selenium import webdriver

from javascript.js_element import CssElement


class Base(object):
 window = CssElement

 def __init__(self, driver: WebDriver):
  self.driver = driver

 def load_url(self, url):
  return self.driver.get(url)


class BaiDuPage(Base):
 search_input = CssElement("#kw", describe="百度搜索框")
 search_button = CssElement("#su", describe="百度按鈕")

 def search(self):
  self.search_input.height_light()
  self.search_input.clear()
  time.sleep(2) # 為了看到效果
  self.search_input.input("linux超")
  time.sleep(2)
  self.search_button.height_light()
  self.search_button.click()
  time.sleep(2)
  self.window.scrollTo("0", "500")
  time.sleep(2) # 為了看到效果


class ChinaRailway(Base):
 data_input = CssElement("#train_date", describe="日期控件")

 def input_date(self, date):
  self.data_input.height_light()
  self.data_input.remove_attribute("readonly")
  self.data_input.input(date)
  time.sleep(2) # 為了看到效果


class TestJs(unittest.TestCase):

 def setUp(self):
  self.driver = webdriver.Firefox()
  self.driver.maximize_window()
  self.driver.implicitly_wait(20)
  self.bai_du_page = BaiDuPage(self.driver)
  self.china_railway = ChinaRailway(self.driver)

 def test_search(self):
  """百度搜索"""
  self.bai_du_page.load_url("https://www.baidu.com")
  self.bai_du_page.search()

 def test_china_railway(self):
  """12306日期"""
  self.china_railway.load_url("https://www.12306.cn/index/")
  time.sleep(5) #
  self.china_railway.input_date("2021-01-01")

 def tearDown(self):
  self.driver.quit()


if __name__ == '__main__':
 unittest.main()

執(zhí)行效果及輸出


總結(jié)

以上所有的操作僅支持CSS表達(dá)式, 當(dāng)然你可以修改替換querySelectorAll方法為getElementById, getElementByClassName等,但是需要注意使用getElementById時,不需要index參數(shù);

Js相對于selenium的控制頁面元素,執(zhí)行速度更快,而且當(dāng)遇到selenium比較難處理的操縱時,可以考慮使用js代碼來實(shí)現(xiàn),當(dāng)然還是需要你懂點(diǎn)Js代碼,不懂也沒關(guān)系,掌握以上代碼完全夠你解決實(shí)際問題

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • JavaScript實(shí)現(xiàn)打地鼠小游戲

    JavaScript實(shí)現(xiàn)打地鼠小游戲

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)打地鼠小游戲的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 深入理解requireJS-實(shí)現(xiàn)一個簡單的模塊加載器

    深入理解requireJS-實(shí)現(xiàn)一個簡單的模塊加載器

    本篇文章主要介紹了深入理解requireJS-實(shí)現(xiàn)一個簡單的模塊加載器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JavaScript TypeScript實(shí)現(xiàn)貪吃蛇游戲完整詳細(xì)流程

    JavaScript TypeScript實(shí)現(xiàn)貪吃蛇游戲完整詳細(xì)流程

    這篇文章主要介紹了JavaScript TypeScript實(shí)現(xiàn)貪吃蛇游戲流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • 微信小程序連接數(shù)據(jù)庫與WXS的使用方法詳細(xì)介紹

    微信小程序連接數(shù)據(jù)庫與WXS的使用方法詳細(xì)介紹

    這篇文章主要介紹了微信小程序連接數(shù)據(jù)庫與WXS的使用方法,微信小程序是騰訊內(nèi)部的產(chǎn)品,不能直接打開一個外部的鏈接,但是騰訊為開發(fā)者封裝好了API用來請求一個網(wǎng)站的內(nèi)容或者服務(wù),感興趣的同學(xué)可以參考下
    2023-12-12
  • 用js模擬JQuery的show與hide動畫函數(shù)代碼

    用js模擬JQuery的show與hide動畫函數(shù)代碼

    用javascript實(shí)現(xiàn)的模擬jquery下的顯示與隱藏的動畫效果,學(xué)習(xí)的朋友可以參考下。
    2010-09-09
  • JS字符串與二進(jìn)制的相互轉(zhuǎn)化實(shí)例代碼詳解

    JS字符串與二進(jìn)制的相互轉(zhuǎn)化實(shí)例代碼詳解

    這篇文章主要介紹了JS字符串與二進(jìn)制的相互轉(zhuǎn)化 ,在文中給大家提到了Js之字符串和字節(jié)碼之間的相互轉(zhuǎn)換,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • 小程序分頁實(shí)踐之編寫可復(fù)用分頁組件

    小程序分頁實(shí)踐之編寫可復(fù)用分頁組件

    這篇文章主要介紹了小程序分頁實(shí)踐之編寫可復(fù)用分頁組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • javascript 關(guān)于賦值、淺拷貝、深拷貝的個人理解

    javascript 關(guān)于賦值、淺拷貝、深拷貝的個人理解

    關(guān)于賦值、淺拷貝、深拷貝,以前也思考良久,很多時候都以為記住了,但是,我太難了。今天我特地寫下筆記,希望可以完全掌握這個東西,也希望可以幫助到任何想對學(xué)習(xí)這個東西的同學(xué)
    2019-11-11
  • JavaScript數(shù)組的5種迭代方法

    JavaScript數(shù)組的5種迭代方法

    這篇文章主要為大家詳細(xì)介紹了JavaScript數(shù)組的5種迭代方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • echarts餅圖labelLine線的長度自適應(yīng)設(shè)置

    echarts餅圖labelLine線的長度自適應(yīng)設(shè)置

    這篇文章主要給大家介紹了關(guān)于echarts餅圖labelLine線的長度自適應(yīng)設(shè)置的相關(guān)資料,在echarts中,餅圖的標(biāo)簽線可以通過設(shè)置 labelLine屬性來自定義位置,需要的朋友可以參考下
    2023-08-08

最新評論

SHOW| 临武县| 偃师市| 华阴市| 香港| 永州市| 民乐县| 股票| 贡山| 新竹县| 泗阳县| 铁力市| 长垣县| 长垣县| 安达市| 密云县| 临安市| 醴陵市| 普安县| 伊吾县| 渝中区| 东乡| 滁州市| 龙游县| 茶陵县| 田林县| 水城县| 楚雄市| 绥中县| 馆陶县| 丽水市| 铅山县| 新安县| 江西省| 黄平县| 上犹县| 佛学| 陆河县| 连云港市| 汕尾市| 海兴县|