国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Web 自動化測試框架 sweetest 介紹

lijy91 / 2496人閱讀

摘要:介紹是一款自動化測試框架,或者說是解決方案,名字取含義。打開操作,一般要在測試數(shù)據(jù)中指定新窗口名稱,如新窗口百度搜索窗口。測試數(shù)據(jù)列為要輸入的內(nèi)容。

介紹

sweetest 是一款 Web 自動化測試框架,或者說是解決方案,名字取 Selenium, Web UI, Excel, Element, Test 含義。
特點:

簡單快速,輕松上手

無需編碼能力

在 Excel 中以文本編寫測試用例

維護成本低

支持千、萬級別的用例規(guī)模

擁抱變化,支持敏捷

背景

目前,Web 自動化測試基本上是以 Selenium 為接口來編寫測試代碼,但效果往往不是很好,普遍遇到如下問題:

用例設(shè)計人員的編碼能力很弱,測試代碼編寫和維護成本高,效果差;

測試代碼量大,測試意圖不直觀,無法支撐千、萬級別的用例規(guī)模;

Web 頁面元素的定位非常繁瑣,且頁面結(jié)構(gòu)經(jīng)常變動,導致用例失效。

我們知道,傳統(tǒng)的測試用例一般是在 Excel 中用文本編寫的,如果自動化測試用例也這么寫,是不是就可以解決問題1和2?
對于問題3,我想是時候?qū)﹂_發(fā)提出一些要求了,同時我們的元素定位也要優(yōu)化,讓頁面自由的去變化,而我們的定位只做最小適用。

實現(xiàn)思路

Selenium 為底層接口;

在 Excel 中用文本編寫測試用例;

元素定位表格化,且優(yōu)先使用“板塊通用定位法”;

要求開發(fā)提供必要的、統(tǒng)一的元素屬性;

框架負責解析測試用例,執(zhí)行用例,記錄日志,輸出測試結(jié)果。

方案

開發(fā)語言:Python

底層接口:Selenium

用例工具:Excel

測試用例如下圖:

安裝 環(huán)境要求

系統(tǒng)要求:Windows

Python 版本:3.6+

Selenium

瀏覽器:Chrome

Chrome 驅(qū)動: chromedriver

安裝 sweetest

pip install sweetest

快速體驗

打開 cmd 命令窗口,切換到某個目錄,如:D:Autotest

sweetest
cd sweetest_sample
python start.py

OK,如果一切順利的話,sweetest 已經(jīng)跑起來了

目錄結(jié)構(gòu)

目錄 說明
element 頁面元素表目錄
Baidu-Elements.xlsx 頁面元素表,名稱格式:project_name + "-Elements.xlsx"
junit junit格式測試結(jié)果目錄
log 自動化測試運行日志目錄
report Excel 格式測試結(jié)果目錄
snapshot 錯誤截圖目錄
testcase 測試用例目錄
Baidu-TestCase.xlsx 測試用例,名稱格式:project_name + "-TestCase.xlsx"
start.py 啟動腳本,test = Autotest(project_name, sheet_name)

備注:以上3處的 project_name 必須一致

頁面元素表

頁面元素表的作用主要是把元素定位獨立出來,一是方便維護定位信息,二是測試用例中用元素名稱書寫,可讀性更高。

目錄 注釋
page element 所在的頁面,在所有頁面都可用的 element 放在“通用”下面,如 title
frame element 所在的 frame id,如果是頂層 frame,可為空。
name element 名稱,在不同的 page 下面可以同名
by Selenium 定義方式
value Selenium 定義的值
備注 注釋作用
元素定位

id, link_text, partial_link_text, xpath, class_name

如:

page name by value
百度搜索頁面 搜索框 id kw

則自動化運行時會以 find_element_by_id("kw") 來定位

帶變量的定位方式

如示例中:

page name by value
百度搜索頁面 搜索結(jié)果# xpath //*[@id="#"]/h3/a

寫用例時,需要在 搜索結(jié)果# 后面帶上變量,如: 搜索結(jié)果#1

操作 頁面 元素
點擊 百度搜索頁面 搜索結(jié)果#1

則自動化運行時會以 find_element_by_xpath("http://*[@id="1"]/h3/a") 來定位

已定義好的常用變量定位方式:

id#

link#

*link#

xpath#

class#

name#

url#

如:url#www.baidu.com

當然,如果#后面的變量不夠直觀的話,不建議太多使用這幾個變量方式。

頁面標題

頁面的 title

頁面URL

頁面的 url

一般來講,導航欄在所有頁面都存在,應該把導航欄放在“通用”下面,做成變量定位方式,如示例中的:

page name by value
通用 搜索頁導航欄# xpath //*[@class="s_tab"]//a[text()="#"]

用例中的寫法:

操作 頁面 元素
點擊 通用 搜索頁導航欄#新聞

測試用例

下拉菜單配置

操作、頁面、元素這些列其實都是選項列表,利用 Excel 的下拉菜單功能,能夠讓書寫用例更方便,且不易筆誤。
下圖是測試用例文件中的 ElementsMap 頁面:

我們可以通過 Excel 的菜單欄“公式-名稱管理器”來配置這些菜單,同時在用例頁面通過“數(shù)據(jù)-數(shù)據(jù)有效性”配置好“操作”的下拉菜單,以及“頁面-元素”的二級聯(lián)動下拉菜單。

用例字段

必填字段:

用例編號

步驟編號

操作

頁面

元素

前置條件:

BASE: 整個測試套件的基礎(chǔ),必須通過才會執(zhí)行下一步,如:登錄;如果有的話應該為第一個測試用例。

SETUP:每個測試用例執(zhí)行前需要執(zhí)行的用例,只有 SETUP 執(zhí)行成功才會執(zhí)行該用例,如:返回首頁。

MAIN:一組用例的第一用例,和 SUB 一起使用,一個 MAIN 后面可以帶多個連續(xù)的 SUB 用例。此用例需要先執(zhí)行 SETUP 用例。

SUB:和 MAIN 一起使用,當前一個用例(MAIN or SUB)執(zhí)行結(jié)果為通過時才會執(zhí)行,否則測試結(jié)果置為 Blocked;且執(zhí)行此用例前不會執(zhí)行 SETUP 用例。

SNIPPET:用例片段,運行到此用例時不會立即執(zhí)行,需要在其他用例中使用“執(zhí)行”關(guān)鍵字調(diào)用此“用例片段”,才會執(zhí)行;配合“執(zhí)行”關(guān)鍵字的變量賦值功能,可以實現(xiàn)用例復用。

注意事項:

一般必須有 SETUP 用例。當執(zhí)行 SETUP 失敗,會嘗試執(zhí)行一次 BASE->SETUP 作為 SETUP 的執(zhí)行結(jié)果。

BASE 用例可以有 0 到多個,但作為 SETUP 中 BASE->SETUP 的 BASE 只有最后一個 BASE 用例。

SETUP 用例只能有 1 條,如果寫了多條,只有最后一條起作用。

操作(關(guān)鍵字)及對應的測試數(shù)據(jù)

打開

get 方法,打開一個鏈接。

打開操作,一般要在測試數(shù)據(jù)中指定新窗口名稱,如:新窗口=百度搜索窗口。

檢查

取頁面元素的值、屬性和預期結(jié)果對比。

測試數(shù)據(jù)中如果沒有寫“k=v”的方式,則默認是取元素的 text。

檢查 text:

操作 頁面 元素 測試數(shù)據(jù)
檢查 百度搜索頁面 搜索按鈕 百度一下

等價于

操作 頁面 元素 測試數(shù)據(jù)
檢查 百度搜索頁面 搜索按鈕 text=百度一下

檢查屬性:

操作 頁面 元素 測試數(shù)據(jù)
檢查 百度搜索頁面 搜索框 name=wd

“頁面標題”和“頁面URL”直接在測試數(shù)據(jù)中寫預期結(jié)果即可。

操作 頁面 元素 測試數(shù)據(jù)
檢查 百度搜索頁面 頁面標題 百度一下,你就知道

注意:測試數(shù)據(jù)中,由于逗號(,or ,)是多個“k=v”的分隔符,所以如果 v 中有逗號,要用反斜杠()轉(zhuǎn)義;但等號(=)無需轉(zhuǎn)義。

輸入

在輸入框中輸入文本。

測試數(shù)據(jù)列為要輸入的內(nèi)容。

點擊

點擊按鈕或者鏈接等(一切可點擊操作的)元素。此關(guān)鍵字支持在同一個頁面上順序點擊多個元素,在元素列以豎杠(|)分割即可,如:

操作 頁面 元素
點擊 百度搜索頁面 搜索按鈕|搜索結(jié)果#1

移動到

有些頁面元素,當鼠標移動到上面時,會彈出下拉菜單等。此操作同關(guān)鍵字“點擊”類似。

執(zhí)行

即執(zhí)行測試用例片段,支持在測試數(shù)據(jù)中給變量賦值,如我們有用例片段 SNIPPET_001,則測試用例 BAIDU_002 中,步驟1如下:

操作 頁面 元素 測試數(shù)據(jù)
執(zhí)行 用例片段 SNIPPET_001 keywords=搜狗

把變量 keyswords 賦值為“搜狗”,此步驟會執(zhí)行用例片段 SNIPPET_001,其搜索的關(guān)鍵字為“搜狗”。

檢查

把檢查結(jié)果反向,此關(guān)鍵字暫時未完整實現(xiàn)。

測試數(shù)據(jù):

測試數(shù)據(jù)支持模糊匹配,如下:

操作 頁面 元素 測試數(shù)據(jù)
檢查 通用 頁面標題 *知乎

則,頁面標題中含有“知乎”即為通過。注意星號(*)要寫在開頭。

輸出數(shù)據(jù):

在運行時,把元素的值或?qū)傩再x值給變量,此變量可以在之后的步驟中使用"<>"引用變量名。

操作 頁面 元素 測試數(shù)據(jù) 輸出數(shù)據(jù)
點擊 百度搜索頁面 搜索結(jié)果#1 title=text
檢查 通用 頁面標題 </td> </tr> </tbody> </table> <b>步驟編號:</b> <p>除了控制語句符號外,步驟編號必須為數(shù)字,建議在 Excel 中設(shè)置為文本格式。</p> <p>控制語句:</p> <p> <p>if then else</p> <table> <thead><tr> <th>步驟編號</th> <th>操作</th> <th>頁面</th> <th>元素</th> <th>測試數(shù)據(jù)</th> </tr></thead> <tbody> <tr> <td>^3</td> <td>檢查</td> <td>通用</td> <td>頁面標題</td> <td>*知乎</td> </tr> <tr> <td>>4</td> <td>點擊</td> <td>通用</td> <td colspan="2">link#登錄</td> </tr> <tr> <td><5</td> <td>點擊</td> <td>通用</td> <td colspan="2">link#注冊機構(gòu)號</td> </tr> </tbody> </table> <p>^ 表示 if 語句</p> <p>> 表示 then 語句</p> <p>< 表示 else 語句</p> <p>if(^) 語句為真時,執(zhí)行 then(>) 語句,為否時執(zhí)行 else(<) 語句。無論后面有沒有 then 或者 else 語句,不影響后續(xù)步驟執(zhí)行。</p> <p>then 語句 或者 else 語句,當不被執(zhí)行時,測試結(jié)果為 "-",不影響測試用例結(jié)果和后續(xù)步驟執(zhí)行。當執(zhí)行時,和正常步驟一樣,成功則繼續(xù),失敗則該用例失敗。</p> </p> <b>進階</b> <b>元素管理</b> <p>測試用例中元素是以 page + name 為唯一標識,來頁面元素表中查找定位信息的。因此,不同 page 下的元素 name 可以相同,但不能和“通用”下的相同。</p> <p>測試用例中,如果 page 不為“通用”,當 <page> + name 查找不到,會繼續(xù)以 “通用” + name 為標識符來查找。</p> <p>“通用”是方便我們寫頁面元素表的,寫用例時我們建議還是用 <page> 來代替“通用”,甚至有時候我們必須這么做。</p> <b>窗口管理(頁面,frame)</b> <p>在瀏覽器中,有可能會打開多個標簽頁,我們叫它為窗口。當你新打開一個標簽頁時,你可以在測試數(shù)據(jù)中給它起個名字,格式為:新窗口=<window_name>, 如:</p> <table> <thead><tr> <th>操作</th> <th>頁面</th> <th>元素</th> <th>測試數(shù)據(jù)</th> </tr></thead> <tbody> <tr> <td>打開</td> <td>通用</td> <td>百度搜索鏈接</td> <td>新窗口=百度搜索窗口</td> </tr> <tr> <td>檢查</td> <td>百度搜索頁面</td> <td>頁面標題</td> <td>百度一下,你就知道</td> </tr> </tbody> </table> <p>當你給新的標簽頁起了窗口名字,它之后步驟的頁面("通用"除外)就會綁定到這個窗口。如上面第 2 步,“百度搜索頁面”會綁定到“百度搜索窗口”。那么之后的步驟或用例中,即使打開了多個標簽頁,只要頁面是“百度搜索頁面”,就會切換到“百度搜索窗口”這個標簽頁上操作。</p> <p>注意:“通用”是不綁定到任何窗口的,也不做窗口切換,它直接在“當前窗口”操作。</p> <p>“當前窗口”規(guī)則為:</p> <p>執(zhí)行到某個步驟時,“當前窗口”是瀏覽器焦點所在的窗口,也就是上個步驟執(zhí)行操作的窗口。</p> <p>如果此步驟的頁面已綁定到其他窗口,則“當前窗口”會切換過去。</p> <p>如果此步驟的頁面尚未捆定任何窗口,則會捆定到“當前窗口”。</p> <p>上個步驟如果是新打開的窗口,則“當前窗口”是新打開的窗口。</p> <p>注意:</p> <p>如果打開了 2 個或以上窗口,沒有起名字的窗口,在執(zhí)行到切換窗口的步驟時,會自動被關(guān)掉。</p> <p>起了名字的窗口不會被關(guān)掉。</p> <p>但如果起了同樣的名字,則原先的那個窗口會被關(guān)掉,綁定在其上面的頁面也會被注銷。</p> <b>測試執(zhí)行</b> <p><b>python start.py</b></p> <b>測試報告</b> <p>見 report 目錄</p> <pre> <p>QQ交流群:158755338 (驗證碼:python)</p> <p>項目地址:https://github.com/tonglei100...</p> </pre> </div> <div id="sg0wiog" class="mt-64 tags-seach" > <div id="yku0swe" class="tags-info"> <a style="width:120px;" title="GPU云服務器" href="http://specialneedsforspecialkids.com/site/product/gpu.html">GPU云服務器</a> <a style="width:120px;" title="云服務器" href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo">云服務器</a> <a style="width:120px;" title="python自動化測試框架" href="http://specialneedsforspecialkids.com/yun/tag/pythonzidonghuaceshikuangjia/">python自動化測試框架</a> <a style="width:120px;" title="android自動化測試框架" href="http://specialneedsforspecialkids.com/yun/tag/androidzidonghuaceshikuangjia/">android自動化測試框架</a> <a style="width:120px;" title="web前端自動化測試" href="http://specialneedsforspecialkids.com/yun/tag/webqianduanzidonghuaceshi/">web前端自動化測試</a> <a style="width:120px;" title="web 自動化測試工具" href="http://specialneedsforspecialkids.com/yun/tag/web zidonghuaceshigongju/">web 自動化測試工具</a> </div> </div> <div id="mw00qu0" class="entry-copyright mb-30"> <p class="mb-15"> 文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。</p> <p>轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/40944.html</p> </div> <ul class="pre-next-page"> <li id="w2gqaci" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/40943.html">上一篇:python判斷變量類型時,判斷一個變量的類型時為什么不使用type(),而是用isinstance</a></li> <li id="0gqokga" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/40945.html">下一篇:django rest framework個人學習筆記(六)————Tutorial4.認證于授權(quán)</a></li> </ul> </div> <div id="y2ek0w0" class="about_topicone-mid"> <h3 class="top-com-title mb-0"><span data-id="0">相關(guān)文章</span></h3> <ul class="com_white-left-mid atricle-list-box"> <li> <div id="0o0om2m" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/70409.html"><b>[直播視頻] 《Java 微服務實踐 - Spring Boot 系列》限時折扣</b></a></h2> <p class="ellipsis2 good">摘要:作為微服務的基礎(chǔ)設(shè)施之一,背靠強大的生態(tài)社區(qū),支撐技術(shù)體系。微服務實踐為系列講座,專題直播節(jié),時長高達小時,包括目前最流行技術(shù),深入源碼分析,授人以漁的方式,幫助初學者深入淺出地掌握,為高階從業(yè)人員拋磚引玉。 簡介 目前業(yè)界最流行的微服務架構(gòu)正在或者已被各種規(guī)模的互聯(lián)網(wǎng)公司廣泛接受和認可,業(yè)已成為互聯(lián)網(wǎng)開發(fā)人員必備技術(shù)。無論是互聯(lián)網(wǎng)、云計算還是大數(shù)據(jù),Java平臺已成為全棧的生態(tài)體系,...</p> <div id="2qsoycq" class="com_white-left-info"> <div id="2gqokme" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-912.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/09/small_000000912.jpg" alt=""><span id="uayg2me" class="layui-hide64">Enlightenment</span></a> <time datetime="">2019-08-16 10:45</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="ksk0c0o" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/121350.html"><b><em>自<em>動化</em></em><em>測試</em>系列(三)|UI<em>測試</em></b></a></h2> <p class="ellipsis2 good">摘要:在上次的自動化測試系列二自動化測試系列二中為大家大體介紹了測試的概念及在豬齒魚中的實踐展開,本文主要圍繞測試進行概念介紹及中的實踐展開。手動測試要求測試人員在每個元素上手動執(zhí)行每個測試。主要是用于回歸測試和同一軟件的新版本測試。 UI 測試是一種測試類型,也稱為用戶界面測試,通過該測試,我們...</p> <div id="wqqqews" class="com_white-left-info"> <div id="2soamew" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-109.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/01/small_000000109.jpg" alt=""><span id="mg0ywou" class="layui-hide64">pingan8787</span></a> <time datetime="">2021-09-28 09:35</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="qawsmsu" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/87412.html"><b>前端每周清單半年盤點之 JavaScript 篇</b></a></h2> <p class="ellipsis2 good">摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點分為新聞熱點開發(fā)教程工程實踐深度閱讀開源項目巔峰人生等欄目。背后的故事本文是對于年之間世界發(fā)生的大事件的詳細介紹,闡述了從提出到角力到流產(chǎn)的前世今生。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為新聞熱點、開發(fā)教程、工程實踐、深度閱讀、開源項目、巔峰人生等欄目。歡迎...</p> <div id="yekusye" class="com_white-left-info"> <div id="kkqykqi" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1530.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/15/small_000001530.jpg" alt=""><span id="migomog" class="layui-hide64">Vixb</span></a> <time datetime="">2019-08-21 12:04</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="as0wqkm" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/8812.html"><b>有贊 <em>WEB</em>-UI <em>自<em>動化</em></em>實踐</b></a></h2> <p class="ellipsis2 good">摘要:概述是由有贊開發(fā)的自動化工具,并以此實現(xiàn)了端和端的核心業(yè)務的自動化。旨在簡化開源工具提供的接口,方便自動化測試用例的設(shè)計。元素定位自動化用例其實可以分成兩部分,定位元素調(diào)用接口操作該元素。一臺用于跑自動化用例的服務器。 概述 Bee 是由有贊 QA 開發(fā)的 UI 自動化工具,并以此實現(xiàn)了 web 端和 wap 端的核心業(yè)務的自動化。旨在簡化開源工具提供的接口,方便 UI 自動化測試用例...</p> <div id="cg0i00s" class="com_white-left-info"> <div id="swqm2im" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1392.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/13/small_000001392.jpg" alt=""><span id="2aywgy0" class="layui-hide64">h9911</span></a> <time datetime="">2019-05-29 17:04</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> </ul> </div> <div id="ekg0cq0" class="topicone-box-wangeditor"> <h3 class="top-com-title mb-64"><span>發(fā)表評論</span></h3> <div id="iw0sauo" class="xcp-publish-main flex_box_zd"> <div id="cuq0cua" class="unlogin-pinglun-box"> <a href="javascript:login()" class="grad">登陸后可評論</a> </div> </div> </div> <div id="w2a0imq" class="site-box-content"> <div id="m20qyg0" class="site-content-title"> <h3 class="top-com-title mb-64"><span>0條評論</span></h3> </div> <div id="osokgka" class="pages"></ul></div> </div> </div> <div id="20sqogk" class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right"> <div id="2y0q0mc" class=""> <div id="ac2o0as" class="com_layuiright-box user-msgbox"> <a href="http://specialneedsforspecialkids.com/yun/u-1350.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/13/small_000001350.jpg" alt=""></a> <h3><a href="http://specialneedsforspecialkids.com/yun/u-1350.html" rel="nofollow">lijy91</a></h3> <h6>男<span>|</span>高級講師</h6> <div id="c2w0gyq" class="flex_box_zd user-msgbox-atten"> <a href="javascript:attentto_user(1350)" id="attenttouser_1350" class="grad follow-btn notfollow attention">我要關(guān)注</a> <a href="javascript:login()" title="發(fā)私信" >我要私信</a> </div> <div id="siq20qg" class="user-msgbox-list flex_box_zd"> <h3 class="hpf">TA的文章</h3> <a href="http://specialneedsforspecialkids.com/yun/ut-1350.html" class="box_hxjz">閱讀更多</a> </div> <ul class="user-msgbox-ul"> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/122935.html">Dmit,全新日本Pro VPS 8折,100M大帶寬,CN2 GIA/10099(9929)/CM</a></h3> <p>閱讀 3110<span>·</span>2021-11-10 11:36</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/122432.html">實戰(zhàn)!《長津湖》為什么這么火爆?我用 Python 來分析貓眼影評</a></h3> <p>閱讀 3312<span>·</span>2021-10-13 09:40</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/121081.html">Arduino開發(fā)-TFT_eSPI庫學習</a></h3> <p>閱讀 6051<span>·</span>2021-09-26 09:46</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/117294.html">天天都在使用CSS,那么CSS的原理是什么呢?</a></h3> <p>閱讀 662<span>·</span>2019-08-30 15:55</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/116679.html">Codepen 每日精選(2018-4-10)</a></h3> <p>閱讀 1409<span>·</span>2019-08-30 15:53</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/112793.html">CSS網(wǎng)格布局基礎(chǔ)</a></h3> <p>閱讀 1579<span>·</span>2019-08-29 13:55</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/112136.html">純CSS的星級評價效果</a></h3> <p>閱讀 2997<span>·</span>2019-08-29 12:46</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/111993.html">CSS題目及答案整理</a></h3> <p>閱讀 3204<span>·</span>2019-08-29 12:34</p></li> </ul> </div> <!-- 文章詳情右側(cè)廣告--> <div id="02sowo0" class="com_layuiright-box"> <h6 class="top-com-title"><span>最新活動</span></h6> <div id="i0k0cwa" class="com_adbox"> <div id="gykua0o" class="layui-carousel" id="right-item"> <div carousel-item> <div> <a href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240625/2rTjEHmi.png" alt="云服務器"> </a> </div> <div> <a href="http://specialneedsforspecialkids.com/site/product/gpu.html" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服務器"> </a> </div> </div> </div> </div> <!-- banner結(jié)束 --> <div id="200weim" class="adhtml"> </div> <script> $(function(){ $.ajax({ type: "GET", url:"http://specialneedsforspecialkids.com/yun/ad/getad/1.html", cache: false, success: function(text){ $(".adhtml").html(text); } }); }) </script> </div> </div> </div> </div> </div> </section> <!-- wap拉出按鈕 --> <div id="gimkumo" class="site-tree-mobile layui-hide"> <i class="layui-icon layui-icon-spread-left"></i> </div> <!-- wap遮罩層 --> <div id="sme0ikq" class="site-mobile-shade"></div> <!--付費閱讀 --> <div class="soieciy" id="payread"> <div id="0eygqye" class="layui-form-item">閱讀需要支付1元查看</div> <div id="gkeawmc" class="layui-form-item"><button class="btn-right">支付并查看</button></div> </div> <script> var prei=0; $(".site-seo-depict pre").each(function(){ var html=$(this).html().replace("<code>","").replace("</code>","").replace('<code class="javascript hljs" codemark="1">',''); $(this).attr('data-clipboard-text',html).attr("id","pre"+prei); $(this).html("").append("<code>"+html+"</code>"); prei++; }) $(".site-seo-depict img").each(function(){ if($(this).attr("src").indexOf('data:image/svg+xml')!= -1){ $(this).remove(); } }) $("LINK[href*='style-49037e4d27.css']").remove(); $("LINK[href*='markdown_views-d7a94ec6ab.css']").remove(); layui.use(['jquery', 'layer','code'], function(){ $("pre").attr("class","layui-code"); $("pre").attr("lay-title",""); $("pre").attr("lay-skin",""); layui.code(); $(".layui-code-h3 a").attr("class","copycode").html("復制代碼 ").attr("onclick","copycode(this)"); }); function copycode(target){ var id=$(target).parent().parent().attr("id"); var clipboard = new ClipboardJS("#"+id); clipboard.on('success', function(e) { e.clearSelection(); alert("復制成功") }); clipboard.on('error', function(e) { alert("復制失敗") }); } //$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5)); </script> <link rel="stylesheet" type="text/css" href="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css"> <script src="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script> <script src="http://specialneedsforspecialkids.com/yun/static/js/clipboard.js"></script> <script>hljs.initHighlightingOnLoad();</script> <script> function setcode(){ var _html=''; document.querySelectorAll('pre code').forEach((block) => { var _tmptext=$.trim($(block).text()); if(_tmptext!=''){ _html=_html+_tmptext; console.log(_html); } }); } </script> <script> function payread(){ layer.open({ type: 1, title:"付費閱讀", shadeClose: true, content: $('#payread') }); } // 舉報 function jupao_tip(){ layer.open({ type: 1, title:false, shadeClose: true, content: $('#jubao') }); } $(".getcommentlist").click(function(){ var _id=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); $("#articlecommentlist"+_id).toggleClass("hide"); var flag=$("#articlecommentlist"+_id).attr("dataflag"); if(flag==1){ flag=0; }else{ flag=1; //加載評論 loadarticlecommentlist(_id,_tid); } $("#articlecommentlist"+_id).attr("dataflag",flag); }) $(".add-comment-btn").click(function(){ var _id=$(this).attr("dataid"); $(".formcomment"+_id).toggleClass("hide"); }) $(".btn-sendartcomment").click(function(){ var _aid=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); var _content=$.trim($(".commenttext"+_aid).val()); if(_content==''){ alert("評論內(nèi)容不能為空"); return false; } var touid=$("#btnsendcomment"+_aid).attr("touid"); if(touid==null){ touid=0; } addarticlecomment(_tid,_aid,_content,touid); }) $(".button_agree").click(function(){ var supportobj = $(this); var tid = $(this).attr("id"); $.ajax({ type: "GET", url:"http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxhassupport/" + tid, cache: false, success: function(hassupport){ if (hassupport != '1'){ $.ajax({ type: "GET", cache:false, url: "http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxaddsupport/" + tid, success: function(comments) { supportobj.find("span").html(comments+"人贊"); } }); }else{ alert("您已經(jīng)贊過"); } } }); }); function attenquestion(_tid,_rs){ $.ajax({ //提交數(shù)據(jù)的類型 POST GET type:"POST", //提交的網(wǎng)址 url:"http://specialneedsforspecialkids.com/yun/favorite/topicadd.html", //提交的數(shù)據(jù) data:{tid:_tid,rs:_rs}, //返回數(shù)據(jù)的格式 datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". //在請求之前調(diào)用的函數(shù) beforeSend:function(){}, //成功返回之后調(diào)用的函數(shù) success:function(data){ var data=eval("("+data+")"); console.log(data) if(data.code==2000){ layer.msg(data.msg,function(){ if(data.rs==1){ //取消收藏 $(".layui-layer-tips").attr("data-tips","收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart-o"></i>'); } if(data.rs==0){ //收藏成功 $(".layui-layer-tips").attr("data-tips","已收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart"></i>') } }) }else{ layer.msg(data.msg) } } , //調(diào)用執(zhí)行后調(diào)用的函數(shù) complete: function(XMLHttpRequest, textStatus){ postadopt=true; }, //調(diào)用出錯執(zhí)行的函數(shù) error: function(){ //請求出錯處理 postadopt=false; } }); } </script> <footer> <div id="esomwcg" class="layui-container"> <div id="ack00um" class="flex_box_zd"> <div id="guqm0o0" class="left-footer"> <h6><a href="http://specialneedsforspecialkids.com/"><img src="http://specialneedsforspecialkids.com/yun/static/theme/ukd//images/logo.png" alt="UCloud (優(yōu)刻得科技股份有限公司)"></a></h6> <p>UCloud (優(yōu)刻得科技股份有限公司)是中立、安全的云計算服務平臺,堅持中立,不涉足客戶業(yè)務領(lǐng)域。公司自主研發(fā)IaaS、PaaS、大數(shù)據(jù)流通平臺、AI服務平臺等一系列云計算產(chǎn)品,并深入了解互聯(lián)網(wǎng)、傳統(tǒng)企業(yè)在不同場景下的業(yè)務需求,提供公有云、混合云、私有云、專有云在內(nèi)的綜合性行業(yè)解決方案。</p> </div> <div id="swu0ogy" class="right-footer layui-hidemd"> <ul class="flex_box_zd"> <li> <h6>UCloud與云服務</h6> <p><a href="http://specialneedsforspecialkids.com/site/about/intro/">公司介紹</a></p> <p><a >加入我們</a></p> <p><a href="http://specialneedsforspecialkids.com/site/ucan/onlineclass/">UCan線上公開課</a></p> <p><a href="http://specialneedsforspecialkids.com/site/solutions.html" >行業(yè)解決方案</a></p> <p><a href="http://specialneedsforspecialkids.com/site/pro-notice/">產(chǎn)品動態(tài)</a></p> </li> <li> <h6>友情鏈接</h6> <p><a >GPU算力平臺</a></p> <p><a >UCloud私有云</a></p> <p><a >SurferCloud</a></p> <p><a >工廠仿真軟件</a></p> <p><a >Pinex</a></p> <p><a >AI繪畫</a></p> </li> <li> <h6>社區(qū)欄目</h6> <p><a href="http://specialneedsforspecialkids.com/yun/column/index.html">專欄文章</a></p> <p><a href="http://specialneedsforspecialkids.com/yun/udata/">專題地圖</a></p> </li> <li> <h6>常見問題</h6> <p><a href="http://specialneedsforspecialkids.com/site/ucsafe/notice.html" >安全中心</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/recent/" >新聞動態(tài)</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/report/">媒體動態(tài)</a></p> <p><a href="http://specialneedsforspecialkids.com/site/cases.html">客戶案例</a></p> <p><a href="http://specialneedsforspecialkids.com/site/notice/">公告</a></p> </li> <li> <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="優(yōu)刻得"></span> <p>掃掃了解更多</p></div> </div> <div id="2kuuuau" class="copyright">Copyright ? 2012-2023 UCloud 優(yōu)刻得科技股份有限公司<i>|</i><a rel="nofollow" >滬公網(wǎng)安備 31011002000058號</a><i>|</i><a rel="nofollow" ></a> 滬ICP備12020087號-3</a><i>|</i> <script type="text/javascript" src="https://gyfk12.kuaishang.cn/bs/ks.j?cI=197688&fI=125915" charset="utf-8"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?290c2650b305fc9fff0dbdcafe48b59d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DZSMXQ3P9N"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DZSMXQ3P9N'); </script> <script> (function(){ var el = document.createElement("script"); el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?99f50ea166557aed914eb4a66a7a70a4709cbb98a54ecb576877d99556fb4bfc3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a"; el.id = "ttzz"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(el, s); })(window) </script></div> </div> </footer> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://specialneedsforspecialkids.com/" title="国产xxxx99真实实拍">国产xxxx99真实实拍</a> <div class="friend-links"> <a href="http://belistarlp.com/">国产黄色在线</a> </div> </div> </footer> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body><div id="u2qc2" class="pl_css_ganrao" style="display: none;"><abbr id="u2qc2"></abbr><tbody id="u2qc2"></tbody><pre id="u2qc2"><td id="u2qc2"><fieldset id="u2qc2"></fieldset></td></pre><del id="u2qc2"></del><bdo id="u2qc2"></bdo><samp id="u2qc2"><tbody id="u2qc2"><object id="u2qc2"></object></tbody></samp><tfoot id="u2qc2"></tfoot><cite id="u2qc2"></cite><bdo id="u2qc2"><abbr id="u2qc2"><kbd id="u2qc2"></kbd></abbr></bdo><th id="u2qc2"></th><button id="u2qc2"><samp id="u2qc2"><th id="u2qc2"></th></samp></button><del id="u2qc2"></del><strike id="u2qc2"></strike><strike id="u2qc2"><menu id="u2qc2"><noscript id="u2qc2"></noscript></menu></strike><abbr id="u2qc2"><center id="u2qc2"><dd id="u2qc2"></dd></center></abbr><fieldset id="u2qc2"></fieldset><s id="u2qc2"><small id="u2qc2"><option id="u2qc2"></option></small></s><sup id="u2qc2"><center id="u2qc2"><th id="u2qc2"></th></center></sup><s id="u2qc2"><bdo id="u2qc2"><abbr id="u2qc2"></abbr></bdo></s><strike id="u2qc2"></strike><tbody id="u2qc2"></tbody><tfoot id="u2qc2"></tfoot><li id="u2qc2"></li><rt id="u2qc2"></rt><tbody id="u2qc2"><em id="u2qc2"><del id="u2qc2"></del></em></tbody><cite id="u2qc2"></cite><dl id="u2qc2"><nav id="u2qc2"><abbr id="u2qc2"></abbr></nav></dl><noscript id="u2qc2"></noscript><center id="u2qc2"></center><ul id="u2qc2"><sup id="u2qc2"><source id="u2qc2"></source></sup></ul><table id="u2qc2"></table><abbr id="u2qc2"><kbd id="u2qc2"><pre id="u2qc2"></pre></kbd></abbr><li id="u2qc2"></li><delect id="u2qc2"></delect><tfoot id="u2qc2"></tfoot><ul id="u2qc2"></ul><xmp id="u2qc2"><fieldset id="u2qc2"><menu id="u2qc2"></menu></fieldset></xmp><input id="u2qc2"><tbody id="u2qc2"><em id="u2qc2"></em></tbody></input><source id="u2qc2"></source><li id="u2qc2"></li><ul id="u2qc2"></ul><table id="u2qc2"><tr id="u2qc2"><acronym id="u2qc2"></acronym></tr></table><acronym id="u2qc2"></acronym><menu id="u2qc2"><noscript id="u2qc2"><pre id="u2qc2"></pre></noscript></menu><acronym id="u2qc2"></acronym><samp id="u2qc2"><tr id="u2qc2"><s id="u2qc2"></s></tr></samp><strike id="u2qc2"><rt id="u2qc2"><tbody id="u2qc2"></tbody></rt></strike><center id="u2qc2"></center><ul id="u2qc2"></ul><object id="u2qc2"></object><cite id="u2qc2"></cite><tr id="u2qc2"><wbr id="u2qc2"><cite id="u2qc2"></cite></wbr></tr><input id="u2qc2"></input><code id="u2qc2"></code><source id="u2qc2"><strong id="u2qc2"><optgroup id="u2qc2"></optgroup></strong></source><th id="u2qc2"><object id="u2qc2"><small id="u2qc2"></small></object></th><delect id="u2qc2"></delect><tr id="u2qc2"></tr><kbd id="u2qc2"></kbd><optgroup id="u2qc2"></optgroup><cite id="u2qc2"></cite><code id="u2qc2"></code><dd id="u2qc2"><dl id="u2qc2"><nav id="u2qc2"></nav></dl></dd><input id="u2qc2"></input><center id="u2qc2"></center><acronym id="u2qc2"></acronym><noframes id="u2qc2"></noframes><samp id="u2qc2"><tbody id="u2qc2"><s id="u2qc2"></s></tbody></samp><wbr id="u2qc2"></wbr><wbr id="u2qc2"></wbr><center id="u2qc2"></center><strong id="u2qc2"></strong><code id="u2qc2"><optgroup id="u2qc2"><ul id="u2qc2"></ul></optgroup></code><noframes id="u2qc2"></noframes><tr id="u2qc2"></tr><dl id="u2qc2"><nav id="u2qc2"><li id="u2qc2"></li></nav></dl><sup id="u2qc2"></sup><noscript id="u2qc2"></noscript><menu id="u2qc2"><tr id="u2qc2"><acronym id="u2qc2"></acronym></tr></menu><samp id="u2qc2"><th id="u2qc2"><s id="u2qc2"></s></th></samp><table id="u2qc2"><tr id="u2qc2"><acronym id="u2qc2"></acronym></tr></table><optgroup id="u2qc2"><abbr id="u2qc2"><center id="u2qc2"></center></abbr></optgroup><noscript id="u2qc2"></noscript><acronym id="u2qc2"></acronym><center id="u2qc2"></center><samp id="u2qc2"></samp><em id="u2qc2"></em><sup id="u2qc2"><dd id="u2qc2"><dl id="u2qc2"></dl></dd></sup><fieldset id="u2qc2"></fieldset><cite id="u2qc2"></cite><strike id="u2qc2"><table id="u2qc2"><tr id="u2qc2"></tr></table></strike><rt id="u2qc2"></rt><option id="u2qc2"></option><optgroup id="u2qc2"></optgroup><s id="u2qc2"><bdo id="u2qc2"><abbr id="u2qc2"></abbr></bdo></s><code id="u2qc2"><noframes id="u2qc2"><del id="u2qc2"></del></noframes></code><fieldset id="u2qc2"><menu id="u2qc2"><noscript id="u2qc2"></noscript></menu></fieldset><source id="u2qc2"><strong id="u2qc2"><noframes id="u2qc2"></noframes></strong></source><center id="u2qc2"></center><sup id="u2qc2"></sup><strong id="u2qc2"></strong><kbd id="u2qc2"></kbd><cite id="u2qc2"></cite><strike id="u2qc2"><menu id="u2qc2"><noscript id="u2qc2"></noscript></menu></strike><tr id="u2qc2"></tr><dd id="u2qc2"><strong id="u2qc2"><optgroup id="u2qc2"></optgroup></strong></dd><tr id="u2qc2"></tr><tbody id="u2qc2"></tbody><delect id="u2qc2"></delect><sup id="u2qc2"><center id="u2qc2"><strong id="u2qc2"></strong></center></sup><noframes id="u2qc2"></noframes><option id="u2qc2"><samp id="u2qc2"><tbody id="u2qc2"></tbody></samp></option><bdo id="u2qc2"></bdo><center id="u2qc2"></center><button id="u2qc2"><samp id="u2qc2"><tbody id="u2qc2"></tbody></samp></button><acronym id="u2qc2"></acronym><option id="u2qc2"></option><bdo id="u2qc2"></bdo><bdo id="u2qc2"></bdo><strike id="u2qc2"><menu id="u2qc2"><noscript id="u2qc2"></noscript></menu></strike><li id="u2qc2"></li><dd id="u2qc2"><th id="u2qc2"><nav id="u2qc2"></nav></th></dd><s id="u2qc2"><small id="u2qc2"><button id="u2qc2"></button></small></s><noscript id="u2qc2"></noscript><nav id="u2qc2"><abbr id="u2qc2"><center id="u2qc2"></center></abbr></nav><samp id="u2qc2"></samp><option id="u2qc2"></option><fieldset id="u2qc2"><menu id="u2qc2"><kbd id="u2qc2"></kbd></menu></fieldset><sup id="u2qc2"></sup><kbd id="u2qc2"><pre id="u2qc2"><td id="u2qc2"></td></pre></kbd><td id="u2qc2"></td><strike id="u2qc2"></strike><center id="u2qc2"></center><acronym id="u2qc2"></acronym><code id="u2qc2"></code><samp id="u2qc2"><tbody id="u2qc2"><s id="u2qc2"></s></tbody></samp><tbody id="u2qc2"></tbody><tbody id="u2qc2"></tbody><blockquote id="u2qc2"><tfoot id="u2qc2"><rt id="u2qc2"></rt></tfoot></blockquote><tr id="u2qc2"><wbr id="u2qc2"><cite id="u2qc2"></cite></wbr></tr><pre id="u2qc2"><xmp id="u2qc2"><fieldset id="u2qc2"></fieldset></xmp></pre><ul id="u2qc2"></ul><delect id="u2qc2"></delect><th id="u2qc2"><nav id="u2qc2"><li id="u2qc2"></li></nav></th><pre id="u2qc2"></pre><option id="u2qc2"></option><wbr id="u2qc2"><fieldset id="u2qc2"><table id="u2qc2"></table></fieldset></wbr><pre id="u2qc2"></pre><option id="u2qc2"></option><delect id="u2qc2"></delect></div> <script src="http://specialneedsforspecialkids.com/yun/static/theme/ukd/js/common.js"></script> <<script type="text/javascript"> $(".site-seo-depict *,.site-content-answer-body *,.site-body-depict *").css("max-width","100%"); </script> </html>