Selenium Python WebDriver基礎(chǔ)

WebDriver基礎(chǔ)

歡迎閱讀WebDriver基礎(chǔ)講義。本篇講義將會(huì)重點(diǎn)介紹Selenium WebDriver的環(huán)境搭建和基本使用方法船庇。

WebDriver環(huán)境搭建

Selenium WebDriver 又稱為 Selenium2吭产。

Selenium 1 + WebDriver = Selenium 2

WebDriver是主流Web應(yīng)用自動(dòng)化測(cè)試框架,具有清晰面向?qū)ο?API鸭轮,能以最佳的方式與瀏覽器進(jìn)行交互臣淤。

支持的瀏覽器:

Mozilla Firefox

Google Chrome

Microsoft Internet Explorer

Opera

Safari

Apple iPhone

Android browsers

環(huán)境搭建步驟

在上一篇中,我們已經(jīng)確認(rèn)使用Python來進(jìn)行WebDriver的編碼和操作窃爷。事實(shí)上Python+Selenium WebDriver環(huán)境的搭建分為兩個(gè)部分:

安裝python

安裝Selenium

標(biāo)準(zhǔn)的安裝步驟

選擇Python的版本邑蒋。

Python主流的有兩個(gè)大的版本姓蜂,2.7和3.5(請(qǐng)注意,從Python的3.5版本開始医吊,不再支持Windows XP操作系統(tǒng)钱慢,Windows XP用戶請(qǐng)安裝3.4版本)。我們的例子將會(huì)選用面向未來的3.5版本卿堂。

安裝Python束莫。

在Python的官網(wǎng)下載最新的安裝包,進(jìn)行界面安裝草描。https://www.python.org/

安裝的時(shí)候览绿,推薦選擇“Add exe to path”,將會(huì)自動(dòng)添加Python的程序到環(huán)境變量中穗慕。然后可以在命令行輸入python -V檢測(cè)安裝的Python版本挟裂。

當(dāng)前的版本安裝中將會(huì)默認(rèn)已經(jīng)安裝了setuptools和pip這兩個(gè)Python的基本工具。如果使用了比較舊的Python版本的話揍诽,需要自行安裝這兩個(gè)工具诀蓉。

setuptools:Python的基礎(chǔ)工具包,用來構(gòu)建暑脆、安裝卸載Python程序

pip:Python軟件包的安裝和管理工具渠啤。通過pip可以簡(jiǎn)單的安裝Python的任意類庫(kù)

安裝Selenium2.0版本。

在Windows安裝Selenium2.0添吗,有兩種途徑沥曹。使用pip命令行或者源碼安裝。以下兩種方法碟联,使用任何一個(gè)均可妓美。推薦pip的方式。

方法一:pip命令行安裝鲤孵,運(yùn)行 | cmd壶栋,打開命令行,-U其實(shí)就是--upgrade普监,升級(jí)安裝贵试。

pip install -U selenium

方法二:源碼解壓安裝,前往https://pypi.python.org/pypi/selenium下載最新版的PyPI版本的Selenium凯正,解壓后執(zhí)行

python setup.py install

?

Ubuntu下的環(huán)境搭建

在Ubuntu下的Python的解釋器一般情況下已經(jīng)存在了毙玻。我們需要打開終端,輸入python -V命令進(jìn)行驗(yàn)證廊散。如果沒有安裝Python桑滩,那么需要去Python官網(wǎng)上下載指定版本的源文件,進(jìn)行源碼安裝允睹。安裝完了以后并進(jìn)行環(huán)境變量的設(shè)置运准。

安裝Selenium WebDriver的方法與上述在Windows環(huán)境下安裝部署的方法一致往声。依舊推薦使用pip命令行進(jìn)行安裝。

使用IDE編寫Python

在上述環(huán)境搭建好以后戳吝,我們便可使用Python來編寫自動(dòng)化腳本程序浩销,執(zhí)行Selenium自動(dòng)化測(cè)試。在此之前听哭,我們依舊需要解決一個(gè)問題慢洋,那就是IDE的選擇。

IDE陆盘,Integrated Development Environment普筹,集成開發(fā)環(huán)境。一個(gè)好的編輯器或者好的IDE將會(huì)極大的提高生產(chǎn)力隘马,幫我們做很多事情太防,使得編碼工作更加簡(jiǎn)單,編碼的體驗(yàn)更加容易酸员。一般情況下蜒车,我們有以下幾種工具可以選擇:

IDLE:Python自帶的IDE,功能簡(jiǎn)單幔嗦,使用方便

Notepad++:一個(gè)強(qiáng)大的開源編輯器

Vim:Linux系統(tǒng)中最好用的編輯器之一

Sublime Text:一個(gè)非常輕便好用的現(xiàn)代化的編輯器酿愧,推薦。

PyCharm:JetBrains公司提供的現(xiàn)代化的跨平臺(tái)的Python IDE邀泉。

使用Sublime Text 3搭建Python環(huán)境

****通過快捷鍵Ctrl+ 或者View > Show Console打開控制臺(tái)嬉挡,輸入以下代碼并回車

importurllib.request,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())

安裝完以后,重啟Sublime Text 3

如果在Perferences->package settings中看到package control這一項(xiàng)汇恤,則安裝成功

按下Ctrl+Shift+P調(diào)出命令面板

輸入install package選項(xiàng)并回車

輸入i庞钢,匹配到以后,按回車因谎,安裝基括。Anaconda是一個(gè)終極的Python插件术裸。安裝完了以后便可用Sublime Text 3編寫Python代碼痕鳍,并且使用Ctrl+B來編譯執(zhí)行。

一般來說,一個(gè)好的IDE提供一下功能使鹅,使你的編碼開發(fā)工作變得更有效率:

一個(gè)圖形化的智能代碼提示和補(bǔ)全功能

可以輕松查看方法和類

語(yǔ)法高亮

提供單元測(cè)試和調(diào)試的工具

源代碼版本管理工具的支持

我們可以嘗試用上述的編輯器或者IDE來進(jìn)行Python代碼編寫工作。

開始使用WebDriver

接下來我們嘗試幾個(gè)簡(jiǎn)單的例子來體會(huì)一下Selenium WebDriver的使用昌抠。

示例1

## 引入WebDriver的包fromseleniumimportwebdriver## 創(chuàng)建瀏覽器對(duì)象browser=webdriver.Firefox()## 打開百度網(wǎng)站browser.get('https://www.baidu.com/')

示例2

## 引入WebDriver包fromseleniumimportwebdriver## 引入WebDriver Keys包fromselenium.webdriver.common.keysimportKeys## 創(chuàng)建瀏覽器對(duì)象browser=webdriver.Firefox()## 導(dǎo)航到百度主頁(yè)browser.get('https://www.baidu.com')## 檢查標(biāo)題是否為‘百度一下患朱,你就知道’assert'百度一下,你就知道'inbrowser.title## 找到名字為wd的元素炊苫,賦值給elemelem=browser.find_element_by_name('wd')# 找到搜索框elem.send_keys('seleniumhq'+Keys.RETURN)# 搜索seleniumhq## 關(guān)閉瀏覽器browser.quit()

Selenium 3.0.1 出現(xiàn)的問題以及解決

3.0.1 更新以后裁厅,需要做兩個(gè)操作:

Geckodriver executable needs to be in PATH冰沙。Geckodirver的下載地址:https://github.com/mozilla/geckodriver/releases

報(bào)錯(cuò)內(nèi)容:

WebDriverException:Message:'geckodriver'executable needs to be in Path

geckodriver是一原生態(tài)的第三方瀏覽器,對(duì)于selenium3.x版本都會(huì)使用geckodriver來驅(qū)動(dòng)firefox执虹,所以需要下載geckodriver.exe拓挥。放置在Path 環(huán)境變量可以訪問到的地方。例如 C:\python34

需要將火狐的安裝路徑放到path袋励,然后重啟(必須重啟電腦)

報(bào)錯(cuò)內(nèi)容:

selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

參考地址:http://stackoverflow.com/questions/40208051/selenium-using-python-geckodriver-executable-needs-to-be-in-path/40208762

XAMPP的安裝部署和環(huán)境搭建

XAMPP的安裝侥啤,在Windows操作系統(tǒng)中比較簡(jiǎn)單,可以直接運(yùn)行安裝文件茬故,默認(rèn)全部下一步盖灸,即可完成軟件的安裝。

請(qǐng)注意:Windows XP系統(tǒng)只能可以XAMPP 1.8.2版本磺芭;Windows 7以及以上的系統(tǒng)可以安裝最新版的XAMPP赁炎。XAMPP不分32位和64位操作系統(tǒng)。

XAMPP的部署

XAMPP = OS + Apache + MySQL + PHP + Perl

我們一般部署的網(wǎng)站钾腺,符合XAMPP環(huán)境的話徙垫,只需要啟動(dòng)Apache和MySQL兩個(gè)應(yīng)用。

部署步驟

啟動(dòng)Apache

啟動(dòng)MySQL

解壓網(wǎng)站源文件放棒,例如解壓然之:ranzhi.2.5.zip松邪,請(qǐng)把壓縮包里面的ranzhi這個(gè)文件夾解壓出來;禪道也類似哨查,需要把壓縮包中的zentaopms文件夾解壓出來

部署源文件逗抑,請(qǐng)將解壓以后的源文件放到xampp\htdocs文件夾中

通過瀏覽器訪問部署好的網(wǎng)站源文件,進(jìn)行向?qū)О惭b寒亥。http://localhost/ranzhi/www

PS:這里我們主要支持的是PHP+MySQL開發(fā)的網(wǎng)站部署邮府。

XAMPP的問題解決

無法啟動(dòng)Apache:請(qǐng)認(rèn)真查看日志,判斷80和443端口被什么樣的程序占用溉奕,需要關(guān)閉對(duì)應(yīng)程序褂傀,或者修改Apache的端口。

IIS:控制面板 | 管理工具 | Internet信息服務(wù) | 默認(rèn)網(wǎng)站 | 關(guān)閉

VisualSVN Server: 控制面板 | 管理工具 | VisualSVN Server | 關(guān)閉

VMware Workstation: 開始 | VMware Workstation | 編輯 | 首選項(xiàng) | 共享虛擬機(jī) | 禁用共享

HP LoadRunner: 右側(cè)任務(wù)欄 | 右鍵 | 關(guān)閉

修改XAMPP Apache 端口:Config | httpd.conf修改Linsten 80 | Httpd-ssl.conf修改 Listen 443

無法啟動(dòng)MySQL:請(qǐng)認(rèn)真查看錯(cuò)誤日志加勤,找到已經(jīng)啟動(dòng)的MySQL的程序進(jìn)程仙辟,殺掉該進(jìn)程。

使用unittest編寫測(cè)試腳本

通過上面的例子鳄梅,我們可以簡(jiǎn)單的寫出Selenium WebDriver的腳本叠国,但是對(duì)于測(cè)試工作來說,上述的腳本還遠(yuǎn)遠(yuǎn)不夠戴尸。因?yàn)樯鲜龅哪_本沒有“檢查”粟焊。

接下來我們將會(huì)使用Python語(yǔ)言的unittest框架展開“檢查”。

unittest基礎(chǔ)

unittest框架的原本的名字是PyUnit。是從JUnit這樣一個(gè)被廣泛使用的Java應(yīng)用開發(fā)的單元測(cè)試框架創(chuàng)造而來项棠。類似的框架還有NUnit(.Net開發(fā)的單元測(cè)試框架)等悲雳。

我們可以使用unittest框架為任意Python項(xiàng)目編寫可理解的單元測(cè)試集合。現(xiàn)在這個(gè)unittest已經(jīng)作為Python的標(biāo)準(zhǔn)庫(kù)模塊發(fā)布香追。我們安裝完P(guān)ython以后合瓢,便可以直接使用unittest。

unittest框架提供了編寫test cases透典,test suites和test fixtures的基本功能晴楔。我們首先關(guān)注Test cases的編寫與執(zhí)行。

使用unittest需要以下簡(jiǎn)單的三步:

引入unittest模組

繼承unittest.TestCase基類

測(cè)試方法以test開頭

unittest示例

## 引入unittest模組importunittest## 定義測(cè)試類掷匠,名字為DemoTests## 該類必須繼承unittest.TestCase基類classDemoTests(unittest.TestCase):## 使用'@'修飾符滥崩,注明該方法是類的方法## setUpClass方法是在執(zhí)行測(cè)試之前需要先調(diào)用的方法## 是開始測(cè)試前的初始化工作@classmethoddefsetUpClass(cls):pass## 測(cè)試一(務(wù)必以test開頭)deftest_01(self):pass## 測(cè)試三(務(wù)必以test開頭)deftest_02(self):pass## 測(cè)試三(務(wù)必以test開頭)deftest_03(self):pass## tearDownClass方法是執(zhí)行完所有測(cè)試后調(diào)用的方法## 是測(cè)試結(jié)束后的清除工作@classmethoddeftearDownClass(cls):pass# 執(zhí)行測(cè)試主函數(shù)if__name__=='__main__':## 執(zhí)行main全局方法,將會(huì)執(zhí)行上述所有以test開頭的測(cè)試方法unittest.main(verbosity=2)

Python知識(shí)的補(bǔ)充:

Python文件的后綴名是.py

.py文件可以用來直接執(zhí)行讹语。也可以被用來作為模塊導(dǎo)入钙皮。在cmd命令行中執(zhí)行的命令為python demo.py

在Python中導(dǎo)入模塊(模組)一般使用的是import

使用unittest框架編寫Selenium WebDriver測(cè)試

接下來我們查看一個(gè)完整的Selenium WebDriver自動(dòng)化測(cè)試實(shí)例

實(shí)例

importunittestfromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysclassSearchTests(unittest.TestCase):defsetUp(self):# 創(chuàng)建一個(gè)新的瀏覽器對(duì)象self.driver=webdriver.Firefox()self.driver.implicitly_wait(30)self.driver.maximize_window()# 導(dǎo)航到京東主頁(yè)self.driver.get("https://www.jd.com/")deftest_search_by_category(self):# 獲取到搜索框self.search_field=self.driver.find_element_by_id("key")self.search_field.clear()# 輸入iphone 6s plus并按下回車進(jìn)行搜索self.search_field.send_keys("iphone 6s plus"+Keys.RETURN)# 獲取所有的查詢結(jié)果products=self.driver.find_elements_by_css_selector("li[class='gl-item']")# 斷言:檢查查詢出來的個(gè)數(shù)是否為24個(gè)self.assertEqual(24,len(products))deftearDown(self):# 關(guān)閉瀏覽器對(duì)象self.driver.quit()if__name__=='__main__':unittest.main(verbosity=2)

理解unittest框架提供的各種斷言方法

方法 Method檢查條件

assertEqual(a, b [, msg])a == b,msg可選顽决,用來解釋失敗的原因

assertNotEqual(a, b [, msg]a != b短条,msg可選,用來解釋失敗的原因

assertTrue(x [, msg])x 是真才菠,msg可選茸时,用來解釋失敗的原因

assertFalse(x [, msg])x 是假,msg可選赋访,用來解釋失敗的原因

assertIsNot(a, b [, msg])a 不是 b可都,msg可選,用來解釋失敗的原因

WebDriver API 基本操作

這里我們將會(huì)開始WebDriver API的基本操作蚓耽,從元素定位以及瀏覽器的基本操作開始渠牲。

定位符

元素的定位和操作是自動(dòng)化測(cè)試的核心部分,其操作是建立在定位的基礎(chǔ)上的步悠。因此我們首選要開始定位元素签杈。

在html里面,元素具有各種各樣的屬性鼎兽。我們可以通過這樣唯一區(qū)別其他元素的屬性來定位到這個(gè)元素答姥。WebDriver提供了一系列的元素定位方法。常見的有以下幾種:

id

name

class name

tag

link text

partial link text

xpath

css selector

查找簡(jiǎn)單元素

我們從簡(jiǎn)單的一個(gè)元素開始定位谚咬。最基本的方法是id和name鹦付。大多數(shù)元素有這兩個(gè)屬性,在對(duì)控件的id和name命名是一般也會(huì)使其有意義序宦,而取不同的名字睁壁。

例如我們看下面這段html

<inputid="search"type="text"name="q"value=""class="input-text"maxlength="128"/>

我們可以使用對(duì)應(yīng)的方法來定位這個(gè)input

find_element_by_id('search')find_element_by_name('q')find_element_by_class_name('input-text')

這里我們開始用最簡(jiǎn)單的方式來嘗試定位

查看下面一個(gè)例子

self.driver.get('http://pro.demo.zentao.net')# 用name定位用戶文本輸入框self.account_field=self.driver.find_element_by_name('account')# 用name定位密碼文本輸入框self.password_field=self.driver.find_element_by_name('password')self.account_field.clear()self.password_field.clear()self.driver.implicitly_wait(30)# 輸入用戶名demoself.account_field.send_keys('demo')# 輸入密碼123456self.password_field.send_keys('123456')self.driver.find_element_by_id('submit').click()self.driver.implicitly_wait(30)companyname=self.driver.find_element_by_id('companyname')self.assertEqual('demo項(xiàng)目管理系統(tǒng)',companyname.text)

示例2

self.driver.find_element_by_id('menuproduct').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menuproject').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menuqa').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menudoc').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menureport').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menucompany').click()self.driver.implicitly_wait(30)self.driver.find_element_by_link_text('退出').click()self.driver.implicitly_wait(30)

此外XPath定位和CSS Selector定位背苦,和定位一組元素這樣的內(nèi)容案例互捌,將在后續(xù)的講義繼續(xù)探討和講解潘明。

控制瀏覽器

瀏覽器的控制也是自動(dòng)化測(cè)試的一個(gè)基本組成部分,我們可以將瀏覽器最大化秕噪,設(shè)置瀏覽器的高度和寬度以及對(duì)瀏覽器進(jìn)行導(dǎo)航操作等钳降。

## 瀏覽器最大化driver.maximize_window()## 設(shè)置瀏覽器的高度為800像素,寬度為480像素driver.set_window_size(480,800)## 瀏覽器后退driver.back()## 瀏覽器前進(jìn)driver.forward()

這里我們做一個(gè)綜合性的練習(xí)實(shí)例

# coding=utf-8importunittestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditions# import sys# reload(sys)# sys.setdefaultencoding('utf8')classWebDriverTests(unittest.TestCase):@classmethoddefsetUpClass(cls):# create a new Firefox sessioncls.driver=webdriver.Firefox()cls.driver.get('about:blank')cls.driver.implicitly_wait(30)print(" -- set up finished -- ")print()deftest_01_navigate(self):passurl_baidu='https://www.baidu.com/'url_zentao='http://pro.demo.zentao.net/user-login-Lw==.html'# 導(dǎo)航到百度self.driver.get(url_baidu)self.driver.maximize_window()self.driver.implicitly_wait(30)# 導(dǎo)航到禪道self.driver.get(url_zentao)self.driver.maximize_window()self.driver.implicitly_wait(30)# 后退self.driver.back()self.assertEqual(url_baidu,self.driver.current_url)self.driver.implicitly_wait(30)# 前進(jìn)self.driver.forward()self.assertEqual(url_zentao,self.driver.current_url)self.driver.implicitly_wait(30)print("-- test 01 finished -- ")print()deftest_02_element_interaction(self):self.driver.get('http://pro.demo.zentao.net')## 找到用戶名和密碼的輸入框self.account_field=self.driver.find_element_by_name('account')self.password_field=self.driver.find_element_by_name('password')## 清除當(dāng)前的輸入self.account_field.clear()self.password_field.clear()self.driver.implicitly_wait(30)## 輸入用戶名和密碼腌巾,進(jìn)行登錄self.account_field.send_keys('demo')self.password_field.send_keys('123456')self.driver.find_element_by_id('submit').click()self.driver.implicitly_wait(30)companyname=self.driver.find_element_by_id('companyname')self.assertEqual('demo項(xiàng)目管理系統(tǒng)',companyname.text)print(companyname.get_attribute('type'))print()self.driver.implicitly_wait(30)print('-- test 02 finished -- ')print()deftest_03_element_interation2(self):## 這里執(zhí)行了一段JavaScript代碼js='selectTheme("green")'self.driver.execute_script(js)self.driver.implicitly_wait(30)js='selectTheme("red")'self.driver.execute_script(js)self.driver.implicitly_wait(30)js='selectTheme("lightblue")'self.driver.execute_script(js)self.driver.implicitly_wait(30)js='selectTheme("blackberry")'self.driver.execute_script(js)self.driver.implicitly_wait(30)self.driver.find_element_by_id('menuproduct').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menuproject').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menuqa').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menudoc').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menureport').click()self.driver.implicitly_wait(30)self.driver.find_element_by_id('menucompany').click()self.driver.implicitly_wait(30)self.driver.find_element_by_link_text('退出').click()self.driver.implicitly_wait(30)WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable((By.ID,"submit")))self.driver.implicitly_wait(30)print('-- test 03 finished -- ')print()deftest_04_cookies(self):self.driver.add_cookie({'name':'key-neeeeew','value':'value-neeeewwwww'})# 遍歷cookies 中的name 和value 信息打印遂填,當(dāng)然還有上面添加的信息forcookieinself.driver.get_cookies():print("%s -> %s"%(cookie['name'],cookie['value']))print()self.driver.delete_all_cookies()cookies=self.driver.get_cookies()print(cookies)print()print('-- test 04 finished -- ')print()@classmethoddeftearDownClass(cls):# close the browser windowcls.driver.quit()passprint('-- tear down finished -- ')print()if__name__=='__main__':unittest.main(verbosity=2)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市澈蝙,隨后出現(xiàn)的幾起案子吓坚,更是在濱河造成了極大的恐慌,老刑警劉巖灯荧,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礁击,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逗载,警方通過查閱死者的電腦和手機(jī)哆窿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厉斟,“玉大人挚躯,你說我怎么就攤上這事〔粱啵” “怎么了码荔?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)感挥。 經(jīng)常有香客問我缩搅,道長(zhǎng),這世上最難降的妖魔是什么链快? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任誉己,我火速辦了婚禮,結(jié)果婚禮上域蜗,老公的妹妹穿的比我還像新娘巨双。我一直安慰自己,他們只是感情好霉祸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布筑累。 她就那樣靜靜地躺著,像睡著了一般丝蹭。 火紅的嫁衣襯著肌膚如雪慢宗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音镜沽,去河邊找鬼敏晤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缅茉,可吹牛的內(nèi)容都是我干的嘴脾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蔬墩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼译打!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拇颅,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奏司,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后樟插,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韵洋,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年岸夯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了麻献。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猜扮,死狀恐怖勉吻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旅赢,我是刑警寧澤齿桃,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站煮盼,受9級(jí)特大地震影響短纵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僵控,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一香到、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧报破,春花似錦悠就、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盹靴,卻和暖如春炸茧,著一層夾襖步出監(jiān)牢的瞬間瑞妇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工梭冠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辕狰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓妈嘹,卻偏偏與公主長(zhǎng)得像柳琢,于是被迫代替她去往敵國(guó)和親绍妨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子润脸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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