亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 10:58:44
字體:
來源:轉載
供稿:網友

前言

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

窗口滾動

用途:滑動web頁面

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

參數說明

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)

參數說明

css::css表達式

index:索引值,默認0,標識第一個元素

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

高亮元素

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

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)

參數說明

css:css表達式

index:索引值,默認0,標識第一個元素

點擊元素

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

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

參數說明

css:css表達式

index:索引值,默認0,標識第一個元素

清除輸入框內容

用途:用來清除輸入框的內容

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

參數說明

css:css表達式

index:索引值,默認0,標識第一個元素

輸入內容

用途:輸入框中輸入內容

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)

參數說明

css:css表達式

value:待輸入的數據

index:索引值,默認0,標識第一個元素

說明

以上所有的JS操作,還可以結合selenium中的WebElement按照以下方式實現,因為JS中查找元素的方法有限,比如xpath定位,在js中不存在

如滾動頁面

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

參數說明

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

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

測試代碼

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

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):  """  清除內容  """  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):  """  輸入內容  """  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):  """  點擊元素  """  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 timefrom selenium.webdriver.remote.webdriver import WebDriverimport unittestfrom selenium import webdriverfrom javascript.js_element import CssElementclass 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()

執行效果及輸出


總結

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

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

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品成人av| 一个人www欧美| 久久人人爽国产| 日韩电影免费观看在线观看| 色青青草原桃花久久综合| 亚洲大胆人体视频| 热久久美女精品天天吊色| 国产精品综合久久久| 亚洲精品日韩激情在线电影| 久久精品中文字幕| 久久精品亚洲热| 91久久国产综合久久91精品网站| 日韩中文字幕在线免费观看| 在线精品国产欧美| 亚洲一区制服诱惑| 欧美又大粗又爽又黄大片视频| 日韩高清a**址| 亚洲欧美国产视频| 久久五月天色综合| 欧美国产精品人人做人人爱| 国产丝袜精品第一页| 欧美性猛交xxxx富婆弯腰| 国产又爽又黄的激情精品视频| 欧美福利视频在线| 亚洲人av在线影院| 亚洲大尺度美女在线| 亚洲自拍欧美另类| 精品久久香蕉国产线看观看亚洲| 黑人巨大精品欧美一区二区免费| 日韩精品电影网| 亚洲欧美激情一区| 8090理伦午夜在线电影| 国产精品视频久久久久| 国产精品久久久久久久久久三级| 亚洲人成电影网站| 中文字幕久热精品在线视频| 成人有码在线播放| 最近中文字幕2019免费| 欧美在线不卡区| 亚洲精品久久久久久久久久久| 欧美国产中文字幕| 久久久免费高清电视剧观看| 亚洲电影中文字幕| 亚洲欧美国产视频| 国产精品丝袜白浆摸在线| 91av网站在线播放| 欧美乱大交xxxxx另类电影| 久热精品视频在线观看一区| 欧美性高潮床叫视频| 亚洲自拍偷拍区| 亚洲精品电影在线观看| 欧美日韩精品在线| 国产亚洲欧洲高清一区| 国产精品久久不能| 欧美激情欧美激情| 国产精品xxxxx| 97在线免费观看| 久久成年人免费电影| 久99久在线视频| 国产一区二区视频在线观看| 日韩精品999| 高清日韩电视剧大全免费播放在线观看| 亚洲aⅴ男人的天堂在线观看| 亚洲摸下面视频| 久久久久久久久中文字幕| 黑人巨大精品欧美一区免费视频| 国产精品极品美女在线观看免费| 日韩免费在线看| 色播久久人人爽人人爽人人片视av| 亚洲第一网站免费视频| 日韩网站免费观看高清| 国产成人精品免高潮费视频| 精品中文字幕视频| 国产丝袜精品视频| 欧美国产日韩在线| 欧美中在线观看| 久久精品影视伊人网| 91亚洲精品在线观看| 亚洲激情第一页| 日韩欧美国产成人| 亚洲激情 国产| 欧美黑人巨大xxx极品| 欧美又大又粗又长| 国产精品永久免费观看| 亚洲在线www| 第一福利永久视频精品| 亚洲国产精品悠悠久久琪琪| 亚洲综合社区网| 亚洲乱码av中文一区二区| 57pao国产成人免费| 在线中文字幕日韩| 亚洲欧美激情一区| 成人免费在线网址| www.美女亚洲精品| 91精品国产综合久久香蕉最新版| 国产精品久久久久av免费| 久久99国产精品久久久久久久久| 欧洲午夜精品久久久| 欧美激情按摩在线| 亚洲精品资源在线| 亚洲a级在线观看| 亚洲欧美日韩区| 久久精品福利视频| 亚洲欧美中文字幕在线一区| 国产91精品高潮白浆喷水| 亚洲电影免费观看高清完整版| 国产精品嫩草视频| 久久成人国产精品| 精品国产一区二区三区久久| 美女福利精品视频| 亚洲精品国产品国语在线| 精品中文字幕在线2019| 日韩在线高清视频| 91精品国产综合久久香蕉的用户体验| 国产欧美精品va在线观看| 久久av红桃一区二区小说| 国产欧美婷婷中文| 国产欧美日韩中文字幕| 中文字幕久久久| 国产在线观看91精品一区| 日韩av毛片网| 日本高清不卡的在线| 日韩高清电影好看的电视剧电影| 亚洲精选在线观看| 精品视频偷偷看在线观看| 国产成人avxxxxx在线看| 日韩av电影院| 亚洲一区二区精品| 啪一啪鲁一鲁2019在线视频| 91在线免费观看网站| 亚洲综合色av| 国产精品国产三级国产aⅴ9色| 136fldh精品导航福利| 久久久久久久久久久亚洲| 国产专区精品视频| 亚洲级视频在线观看免费1级| 欧美人成在线视频| 国产91精品青草社区| 国内精品久久久久久中文字幕| 欧美一级免费视频| 成人黄色午夜影院| 91po在线观看91精品国产性色| 欧美电影免费观看| 中文国产成人精品久久一| 亚洲第一男人天堂| 国产精品久久久久久久app| 国产一区欧美二区三区| 国产v综合ⅴ日韩v欧美大片| 一本色道久久综合狠狠躁篇怎么玩| 久久成人人人人精品欧| 亚洲人成在线播放| 97超级碰在线看视频免费在线看| 久久久久久久久久国产精品| 久久五月天色综合| 欧美高清一级大片| 欧美在线视频网| 欧美日本中文字幕| 91精品国产综合久久男男| 岛国av一区二区| 精品国产拍在线观看| 久久99国产精品久久久久久久久| 色妞欧美日韩在线| 日韩一区二区在线视频| 日本人成精品视频在线|