Python Sumaaries

python自動化測試中尋找元素并進(jìn)行操作铐姚,如果在元素好找的情況下刷喜,相信大家都可以較熟練地編寫用例腳本了,但光進(jìn)行操作可能還不夠遭贸,有時候也需要對預(yù)期結(jié)果進(jìn)行判斷。

常用

這里介紹幾個常用斷言的使用方法心软,可以一定程度上幫助大家對預(yù)期結(jié)果進(jìn)行判斷壕吹。-

assertEqual
assertNotEqual
assertTrue
assertFalse
assertIsNone
assertIsNotNone
assertEqual 和 assertNotEqual

assertEqual:如兩個值相等,則pass
assertNotEqual:如兩個值不相等糯累,則pass
使用方法:
assertEqual(first,second,msg)其中first與second進(jìn)行比較算利,如果相等則通過;msg為失敗時打印的信息泳姐,選填效拭;斷言assertNotEqual反著用就可以了。
assertTrue和assertFalse

assertTrue:判斷bool值為True胖秒,則pass
assertFalse:判斷bool值為False缎患,則Pass
使用方法:
assertTrue(expr,msg)其中express輸入相應(yīng)表達(dá)式,如果表達(dá)式為真阎肝,則pass挤渔;msg選填;斷言assertFalse如果表達(dá)式為假风题,則pass
assertIsNone和assertIsNotNone

assertIsNone:不存在判导,則pass
assertIsNotNone:存在,則pass
使用方法:
assertIsNone(obj,msg)檢查某個元素是否存在
總結(jié):

常用
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b 2.7
assertIsNot(a, b) a is not b 2.7
assertIsNone(x) x is None 2.7
assertIsNotNone(x) x is not None 2.7
assertIn(a, b) a in b 2.7
assertNotIn(a, b) a not in b 2.7
assertIsInstance(a, b) isinstance(a, b) 2.7
assertNotIsInstance(a, b) not isinstance(a, b) 2.7
其它
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b 2.7
assertLess(a, b) a < b 2.7
assertLessEqual(a, b) a <= b 2.7
assertRegexpMatches(s, re) regex.search(s) 2.7
assertNotRegexpMatches(s, re) not regex.search(s) 2.7
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs 2.7
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7assertDictEqual(a, b) dicts 2.7
使用時機(jī):

那么我們什么時候應(yīng)該使用斷言呢沛硅?如果沒有特別的目的眼刃,斷言應(yīng)該用于如下情況:
防御性的編程
運(yùn)行時對程序邏輯的檢測
合約性檢查(比如前置條件,后置條件)
程序中的常量
檢查文檔
例:防御性編程中添加斷言
在代碼開始添加注釋是個好的開端摇肌,但是人們都不太喜歡讀和更新這些注釋擂红,這些注釋會很快變得過時。但對于斷言围小,我們可以同時對這塊代碼編寫文檔昵骤,如果這些斷言被違反了,會直接引起一個簡單而又直接的失敗肯适。
assert target in(x, y, z)
if target ==x:
run_x_code()
elif target ==y:
run_y_code()
else:
assert target == z
run_z_code()

##################################################################
selenium+python+API分類總結(jié)

分類

方法

方法描述

客戶端操作

init(self, host, port, browserStartCommand, browserURL)

構(gòu)造函數(shù)变秦。host:selenium server的ip;port:elenium server的port框舔,默認(rèn)為4444伴栓;browserStartCommand:瀏覽器類型,iexplore,firefox钳垮。browserURL:打開的url。

start(self)

啟動客戶端

stop(self)

關(guān)閉客戶端

鼠標(biāo)點(diǎn)擊

click(self, locator)

點(diǎn)擊鏈接额港、按鈕饺窿、單選或者復(fù)選框

double_click(self, locator)

雙擊鏈接、按鈕移斩、單選或者復(fù)選框

click_at(self, locator, coordString)

點(diǎn)擊鏈接肚医、按鈕、單選或者復(fù)選框后調(diào)用waitForPageToLoad向瓷,coordString是鼠標(biāo)事件相對于locator返回元素的位置

double_click_at(self, locator, coordString)

雙擊鏈接肠套、按鈕、單選或者復(fù)選框后調(diào)用waitForPageToLoad猖任,coordString是鼠標(biāo)事件相對于locator返回元素的位置

鼠標(biāo)操作

mouse_over(self, locator)

模擬用戶將鼠標(biāo)懸停在指定元素上

mouse_out(self, locator)

模擬用戶將鼠標(biāo)從指定元素移走

mouse_down(self, locator)

模擬用戶按下鼠標(biāo)鍵你稚,未釋放

mouse_down_at(self, locator, coordString)

模擬用戶按下鼠標(biāo)鍵,未釋放朱躺,coordString是鼠標(biāo)事件相對于locator返回元素的位置

mouse_up(self, locator)

模擬用戶釋放鼠標(biāo)鍵

mouse_up_at(self, locator, coordString)

模擬用戶釋放鼠標(biāo)鍵刁赖,coordString是鼠標(biāo)事件相對于locator返回元素的位置

mouse_move(self, locator)

鼠標(biāo)拖動指定元素

mouse_move_at(self, locator, coordString)

鼠標(biāo)拖動指定元素,coordString是鼠標(biāo)事件相對于locator返回元素的位置

按鍵操作

key_press(self, locator, keySequence)

模擬用戶按下和釋放鍵长搀,keySequence可以是一個字符串(被按下鍵的ASCII碼值)宇弛;也可以是單獨(dú)的字符,例如”e”源请。

shift_key_down(self)

按下shift鍵直到調(diào)用doShiftUp()或者載入新頁面

shift_key_up(self)

釋放shift鍵

alt_key_down(self)

按下alt鍵直到調(diào)用doAltUp()或者載入新頁面

alt _key_up(self)

釋放alt鍵

control_key_down(self)

按下control鍵直到調(diào)用doControlUp()或者載入新頁面

control _key_up(self)

釋放control鍵

key_down(self, locator, keySequence)

模擬用戶按鍵不釋放枪芒,keySequence可以是一個字符串(被按下鍵的ASCII碼值);也可以是單獨(dú)的字符谁尸,例如”e”舅踪。

key_up(self, locator, keySequence)

模擬用戶釋放鍵,keySequence可以是一個字符串(被按下鍵的ASCII碼值)症汹;也可以是單獨(dú)的字符硫朦,例如”e”。

設(shè)置輸入值

type(self, locator, value)

設(shè)置輸入框的值背镇;也可用于設(shè)置組合框和復(fù)選框的值咬展,所設(shè)置的值是勾選的選項(xiàng),是不可見的文本瞒斩。

單選和復(fù)選

check(self, locator)

選中單選或者復(fù)選框

uncheck(self, locator)

取消選中單選或者復(fù)選框

is_checked(self, locator)

檢查單選或者復(fù)選按鈕是否選中破婆,如果指定元素不存在或者不是切換按鈕則失敗

下拉框

select(self, selectLocator, optionLocator)

使用option locator選擇下拉列表的選項(xiàng);其中option locator有以下幾種形式:
1胸囱、 label=labelPattern:基于label匹配選項(xiàng)祷舀,例如可視化文本,* label=regexp:^[Oo]ther。(注意label前面的星號)
2裳扯、 value=valuePattern:基于值匹配選項(xiàng)抛丽,*** value=other。
3饰豺、 id=id:基于id匹配選項(xiàng)亿鲜,
id=option1。
4冤吨、 index=index:基于索引(從零開始)匹配選項(xiàng)蒿柳,
index=2。
如果未指定任何前綴漩蟆,默認(rèn)情況下是label垒探。
selectLocator是下拉列表定位。

add_selection(self, locator, optionLocator)

對于多選元素怠李,在已選選項(xiàng)集合中增加一個選項(xiàng)圾叼,locator是多選框定位。

remove_selection(self, locator, optionLocator)

對于多選元素扔仓,從已選選項(xiàng)集合中刪除一個選項(xiàng)褐奥,locator是多選框定位。

get_selected_labels(self, selectLocator)

獲取下拉列表或者多級下拉列表的多個已選選項(xiàng)的所有l(wèi)abel(可視化文本)

get_selected_label(self, selectLocator)

獲取下拉列表或者多級下拉列表的某個選項(xiàng)的label(可視化文本)

get_selected_values(self, selectLocator)

獲取下拉列表或者多級下拉列表的多個已選選項(xiàng)的所有value(value屬性)

get_selected_value(self, selectLocator)

獲取下拉列表或者多級下拉列表的某個選項(xiàng)的value(value屬性)

get_selected_indexes(self, selectLocator)

獲取下拉列表或者多級下拉列表的多個已選選項(xiàng)的所有index(index從零開始)

get_selected_index(self, selectLocator)

獲取下拉列表或者多級下拉列表的某個選項(xiàng)的index(index從零開始)

get_selected_ids(self, selectLocator)

獲取下拉列表或者多級下拉列表的多個已選選項(xiàng)的所有element ID

get_selected_id(self, selectLocator)

獲取下拉列表或者多級下拉列表的某個選項(xiàng)的element ID

is_something_selected(self, selectLocator)

判斷下拉列表的某個選項(xiàng)是否選中

get_select_options(self, selectLocator)

獲取下拉列表的所有l(wèi)abel

設(shè)置超時或者等待事件

set_speed(self, value)

設(shè)置操作后的等待時間翘簇,以毫秒為單位撬码,設(shè)置后作用于每一個selenium操作,默認(rèn)情況下為0毫秒版保。

get_speed(self)

獲取操作后的等待時間

set_timeout(self, timeout)

為action設(shè)置超時呜笑,默認(rèn)為30秒。一般用于open以及waitFor*彻犁。運(yùn)行錯誤返回error叫胁。

wait_for_page_to_load(self, timeout)

等待裝載新頁面」保可以使用該命令代替”AndWait”命令驼鹅,例如"clickAndWait", "selectAndWait", "typeAndWait"等(這些命令只在js API中提供)。Selenium裝載新頁面時通常會將”newPageLoaded” flag置為true森篷,直到flag恢復(fù)為false才繼續(xù)執(zhí)行命令输钩。超時后返回error。

提交

submit(self, formLocator)

表單提交仲智,在沒有提交按鈕是非常有用的表單提交接口函數(shù)

窗口操作

open(self, url)

打開url买乃,url可以是相對或者絕對url,open按鈕一直等待頁面載入后再處理钓辆,其隱式調(diào)用“AndWait”剪验。注意:由于安全限制肴焊,url的域需要與runner HTML(Selenium Server)的域保持一致,如果需要使用不同域的url功戚,需要啟動新的瀏覽器會話娶眷。

open_window(self, url, windowID)

如果標(biāo)識為ID的窗口還未打開,則打開彈出窗口疫铜。打開窗口后茂浮,需要使用selectWindow命令選擇。注意:當(dāng)window.open調(diào)用發(fā)生在“onLoad”事件之前或者事件過程時壳咕,Selenium無法成功調(diào)用window.open,在這種情況下顽馋,可以使用Selenium的openWindow命令強(qiáng)制打開窗口谓厘,注意使用空白頁面,例如openWindow(””,”muFunnyWindow”)寸谜。
注意:url可以為空竟稳,’windowID’是js window ID。

select_window(self, windowID)

選擇彈出的窗口熊痴,選中后所有的命令都在選中窗口中執(zhí)行他爸。如果想再次選擇主窗口,windowID使用null果善。Selenium根據(jù)windowID查找窗口對象的幾種策略:1诊笤、如果windowID是null,選中瀏覽器初始化時打開的最原始的窗口巾陕。2讨跟、如果windowID是當(dāng)前應(yīng)用窗口的js變量名,則該變量包含js window.open()方法的返回值鄙煤。3晾匠、最后,Selenium查找其哈希表梯刚,在該表中維護(hù)著字符串與窗口對象的映射表凉馆,這里的字符串與js方法window.open(url, windowName, windowFeatures, replaceFlag)中的第二個參數(shù)匹配。如果不知道窗口的名字亡资,可以通過selenium日志查看window.open創(chuàng)建窗口時的名字標(biāo)識澜共。同open_window,無法成功調(diào)用window.open時沟于,可強(qiáng)制性打開空白頁面咳胃。

select_frame(self, locator)

在當(dāng)前窗口選擇frame或者iframe,可以多次調(diào)用該命令選擇嵌套的frame旷太。如果想選擇parent frame展懈,定位符使用’relative=parent’销睁;如果想選擇top frame,使用’relative=top’存崖。也可以使用DOM表達(dá)式直接查找frame冻记,例如dom=frames["main"].frames["subframe"]。

go_back(self)

模擬用戶點(diǎn)擊瀏覽器的后退按鈕

refresh(self)

模擬用戶點(diǎn)擊瀏覽器的刷新按鈕

close(self)

模擬用戶點(diǎn)擊瀏覽器的關(guān)閉按鈕

window_focus(self, windowName)

將焦點(diǎn)設(shè)置到窗口上来惧,windowName為窗口名

window_maximize(self, windowName)

最大化窗口冗栗,windowName為窗口名

get_all_window_ids(self)

返回瀏覽器打開的所有窗口ID

get_all_window_names(self)

返回瀏覽器打開的所有窗口名

get_all_window_titles(self)

返回瀏覽器打開的所有窗口標(biāo)題

彈出窗口

wait_for_pop_up(self, windowID, timeout)

為等待窗口彈出設(shè)置超時,windowID為js的窗口ID供搀,超時的單位為毫秒隅居。超過超時時間后返回錯誤。

choose_cancel_on_next_confirmation(self)

默認(rèn)情況下葛虐,返回true胎源,就像用戶手工點(diǎn)擊ok;運(yùn)行完此命令后屿脐,下次再調(diào)用confirm()則返回false涕蚤,就像用戶點(diǎn)擊Cancle。

answer_on_next_prompt(self, answer)

在下次js窗口彈出時的诵,selenium返回answer中的字符串

is_alert_present(self)

判斷是否有alert窗口出現(xiàn)万栅,此API不會拋出異常

is_prompt_present(self)

判斷是否有prmp窗口出現(xiàn),此API不會拋出異常

is_confirmation_present(self)

判斷是否有confirm窗口出現(xiàn)西疤,此API不會拋出異常

get_alert(self)

獲取先前彈出的js alert窗口的內(nèi)容烦粒,如果沒有alert窗口則失敗。類似于手動點(diǎn)擊ok瘪阁。注意:1撒遣、如果alert出現(xiàn)但是沒有獲取或者驗(yàn)證它,則selenium的下次操作會失敗管跺。2义黎、selenium中的alert不會彈出可視化的alert。3豁跑、不支持頁面onload()時間處理過程中的js alert窗口廉涕,在這種情況下,將會彈出可視化對話窗口艇拍,直到手動點(diǎn)擊ok后selenium才會繼續(xù)執(zhí)行狐蜕。

get_confirmation(self)

獲取先前彈出的js confirm窗口的內(nèi)容,如果沒有confirm窗口則失敗卸夕。類似于手動點(diǎn)擊ok层释,但是如果在之前執(zhí)行了chooseCancelOnNextConfirmation命令,則類似于手動點(diǎn)擊cancel快集。注意:1贡羔、如果confirm出現(xiàn)但是沒有獲取或者驗(yàn)證它廉白,則selenium的下次操作會失敗。2乖寒、selenium中的confirm不會彈出可視化的confirm猴蹂。3、不支持頁面onload()時間處理過程中的js confirm窗口楣嘁,在這種情況下磅轻,將會彈出可視化對話窗口,直到手動點(diǎn)擊ok后selenium才會繼續(xù)執(zhí)行逐虚。

get_prompt(self)

獲取先前彈出的js prompt窗口的內(nèi)容聋溜,如果沒有prompt窗口則失敗。注意:1叭爱、如果alert出現(xiàn)但是沒有獲取或者驗(yàn)證它勤婚,則selenium的下次操作會失敗。2涤伐、selenium中的prompt不會彈出可視化的prompt。3缨称、不支持頁面onload()時間處理過程中的js prompt窗口凝果,在這種情況下,將會彈出可視化對話窗口睦尽,直到手動點(diǎn)擊ok后selenium才會繼續(xù)執(zhí)行器净。4、調(diào)用此API之前必須調(diào)用answerOnNextPromp命令当凡,prompt才能成功處理山害。

獲取頁面元素,元素索引

get_all_buttons(self)

返回頁面所有button的ID沿量,如果某個button沒有ID浪慌,返回“”

get_all_links(self)

返回頁面所有l(wèi)ink的ID,如果某個link沒有ID朴则,返回“”

get_all_fields(self)

返回頁面所有輸入域的ID权纤,如果某個輸入域沒有ID,返回“”

get_attribute_from_all_windows(self, attributeName)

根據(jù)屬性名獲取某個屬性在所有已知窗口中的實(shí)例

get_element_index(self, locator)

獲取元素對于0索引的相對索引乌妒,忽略comment命令和空文本節(jié)點(diǎn)汹想。

獲取元素屬性

get_location(self)

獲取當(dāng)前頁面的絕對url

get_title(self)

獲取當(dāng)前頁面的絕對title

get_body_text(self)

獲取頁面的內(nèi)容

get_value(self, locator)

獲取輸入量的值(以空格截?cái)啵瑢τ趩芜x和復(fù)選框撤蚊,返回值為on或者off

get_text(self, locator)

獲取元素的文本古掏,適用于任何包含文本的元素。此API調(diào)用textContent(firefox)或者innerText(IE)侦啸。(不同js)

get_table(self, tableCellAddress)

獲取表格的單元格槽唾,tableCellAddress的格式為tableLocator.row.column丧枪,其中行和列的索引從零開始,例如foo.1.4夏漱。

get_attribute(self, attributeLocator)

獲取元素屬性的value

get_element_position_left(self, locator)

獲取元素的水平位置

get_element_position_top(self, locator)

獲取元素的垂直位置

get_element_width(self, locator)

獲取元素的寬度

get_element_height(self, locator)

獲取元素的高度

驗(yàn)證元素

is_text_present(self, pattern)

驗(yàn)證頁面上是否有滿足pattern的文本

is_element_present(self, locator)

驗(yàn)證頁面上是否有滿足pattern的文本

is_visible(self, locator)

驗(yàn)證元素是否可見豪诲,元素不存在時失敗。元素不可見通過將css的”visibility”設(shè)置為“hidden”或者將“display”設(shè)置為“none”挂绰。

is_editable(self, locator)

驗(yàn)證輸入元素是否被disable屎篱,元素不存在時失敗。

is_ordered(self, locator1, locator2)

驗(yàn)證兩個元素是否屬于同一個父節(jié)點(diǎn)葵蒂,并且排序交播。兩個元素相同是不排序。

移動元素

dragdrop(self, locator, movementsString)

將定位到的元素拖曳践付,movementString是目的地址相對于當(dāng)前位置的偏移秦士,以像素衡量,例如”+70,-300”永高。不推薦使用dragAndDrop代替隧土。

drag_and_drop(self, locator, movementsString)

將定位到的元素拖曳,movementString是目的地址相對于當(dāng)前位置的偏移命爬,以像素衡量曹傀,例如”+70,-300”。不推薦使用dragAndDrop代替饲宛。

drag_and_drop_to_object(self, locatorOfObjectToBeDragged, locatorOfDragDestinationObject)

將元素拖曳到目標(biāo)對象上皆愉,已兩個元素的左上角位置重合

光標(biāo)操作

set_cursor_position(self, locator, position)

在輸入框或者多行文本中移動光標(biāo),如果元素不是輸入框或者多行文本艇抠,則失敗幕庐。position是輸入域中光標(biāo)的數(shù)字位置,其中0是開頭家淤,-1是結(jié)尾异剥。

get_cursor_position(self, locator)

返回輸入元素(輸入框或者多選框)或者多行文本框的文本光標(biāo)位置。如果指定元素不是輸入元素或者多行文本框媒鼓,或者指定元素沒有光標(biāo)届吁,該方法調(diào)用失敗。注意:該函數(shù)在某些瀏覽器上可能會失效(瀏覽器對js解析的差異性)绿鸣。特別是當(dāng)光標(biāo)或者選擇項(xiàng)被js清除時疚沐,該命令趨向于返回光標(biāo)最后定位的位置,即使光標(biāo)已經(jīng)離開頁面潮模。

js代碼

get_eval(self, script)

執(zhí)行script中的js腳本代碼片段亮蛔,只返回最后一行的結(jié)果。注意:1擎厢、默認(rèn)情況下究流,腳本代碼片段在selenium對象的上下文中執(zhí)行辣吃,因此this是指向selenium對象,window指向最上層的運(yùn)行測試窗口芬探,而不是應(yīng)用窗口神得。2、如果想指向應(yīng)用窗口偷仿,使用this.browserbot.getCurrentWindow()哩簿。3、如果想定位到應(yīng)用頁面中的某個元素酝静,使用this.page().findElement(“foo”)定位foo元素节榜。

get_expression(self, expression)

用于js的預(yù)處理,用于產(chǎn)生類似assertExpression和waitForExpression等别智。expression是返回值宗苍。

wait_for_condition(self, script, timeout)

不斷地運(yùn)行js代碼片段知道返回為true,代碼片段可以有多行薄榛,但只返回最后一行的結(jié)果讳窟,timeout的單位為毫秒。注意:默認(rèn)情況下js代碼片段在selenium runner的測試窗口下運(yùn)行而不是應(yīng)用窗口敞恋,如果需要在應(yīng)用窗口下運(yùn)行挪钓,先調(diào)用selenium.browserbot.getCurrentWindow()。運(yùn)行錯誤返回error耳舅。

獲取html源碼

get_html_source(self)

返回整個html源碼

Cookie操作

get_cookie(self)

返回當(dāng)前測試頁面的所有cookies。

create_cookie(self, nameValuePair, optionsString)

以當(dāng)前測試頁面path和domain創(chuàng)建新的cookie倚评,也可以顯示指定path浦徊。nameValuePair是鍵值對。optionsString目前支持兩種可選項(xiàng)天梧,path=/path/和max_age=60(cookie的有效時間盔性,以秒為單位)。

delete_cookie(self, name, path)

刪除指定路徑下的name的value

事件觸發(fā)

fire_event(self, locator, eventName)

顯示地模擬事件呢岗,以觸發(fā)相應(yīng)的”onevent”處理函數(shù)冕香,eventName例如是focus或者blur等。

多frame和多窗口

get_whether_this_frame_match_frame_expression(self, currentFrameString, target)

用于代理注入模式后豫,在該模式下悉尾,get_whether_this_frame_match_frame_expression在每個frame和window中運(yùn)行,幫助selenium識別出當(dāng)前的frame挫酿。在這種情況下构眯,當(dāng)測試腳本調(diào)用selectFrame時,每個frame都調(diào)用此API計(jì)算哪個frame被選中早龟,選中的frame選擇true惫霸,其它frame返回false猫缭。CurrentFrameString是當(dāng)前frame,target是新frame(可能是相對于當(dāng)前frame)

get_whether_this_window_match_window_expression(self, currentWindowString, target)

原理同上

輔助功能:日志壹店,狀態(tài)欄猜丹,

get_log_messages(self)

很少使用,主要用于當(dāng)frame來自不同域時硅卢,獲取日志信息射窒,因?yàn)樵谶@種情況下不符合js日志集中管理機(jī)制。

set_context(self, context, logLevelThreshold)

寫消息到狀態(tài)欄或者增加瀏覽器端的日志老赤,logLevelThreshold用于指定日志級別(debug轮洋,info,warn抬旺,error)弊予。注意瀏覽器端的日志不會返回給服務(wù)器,并且對于客戶驅(qū)動器不可見开财。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汉柒,一起剝皮案震驚了整個濱河市塞赂,隨后出現(xiàn)的幾起案子赠堵,更是在濱河造成了極大的恐慌,老刑警劉巖暂殖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件历葛,死亡現(xiàn)場離奇詭異正塌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恤溶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門乓诽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咒程,你說我怎么就攤上這事鸠天。” “怎么了帐姻?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵稠集,是天一觀的道長。 經(jīng)常有香客問我饥瓷,道長剥纷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任呢铆,我火速辦了婚禮筷畦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己鳖宾,他們只是感情好吼砂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鼎文,像睡著了一般渔肩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拇惋,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天周偎,我揣著相機(jī)與錄音,去河邊找鬼撑帖。 笑死蓉坎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胡嘿。 我是一名探鬼主播蛉艾,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衷敌!你這毒婦竟也來了勿侯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤缴罗,失蹤者是張志新(化名)和其女友劉穎助琐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體面氓,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兵钮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舌界。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢空。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖禀横,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粥血,我是刑警寧澤柏锄,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站复亏,受9級特大地震影響趾娃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缔御,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一抬闷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦笤成、人聲如沸评架。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵诞。三九已至,卻和暖如春培遵,著一層夾襖步出監(jiān)牢的瞬間浙芙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工籽腕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗡呼,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓皇耗,卻偏偏與公主長得像南窗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子廊宪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容