第一娱局、二單元 Web自動(dòng)化測(cè)試進(jìn)階

1. 什么是框架

框架(framework)是一個(gè)框子 -- 指其約束性,也是一個(gè)架子 -- 指其支撐性咧七,是一個(gè)基本概念上的結(jié)構(gòu)衰齐,用于去解決或者處理復(fù)雜的問(wèn)題。

框架是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì)继阻,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法耻涛;另一種定義認(rèn)為,框架是可被應(yīng)用開(kāi)發(fā)者定制的應(yīng)用骨架瘟檩。前者是從應(yīng)用方面而后者是從目的方面給出的定義抹缕。

框架,其實(shí)就是某種應(yīng)用的半成品墨辛,就是一組組件卓研,供你選用完成你自己的系統(tǒng)。簡(jiǎn)單說(shuō)就是使用別人搭好的舞臺(tái)背蟆,你來(lái)做表演鉴分。

2. 為什么使用框架

1)自己從頭實(shí)現(xiàn)太復(fù)雜
2)使用框架能夠更專(zhuān)注于業(yè)務(wù)邏輯,加快開(kāi)發(fā)速度
3)框架的使用能夠處理更多細(xì)節(jié)問(wèn)題
4)使用人數(shù)多带膀,穩(wěn)定性志珍,擴(kuò)展性好

3. selenium工作原理

image
image
  • 原理:webdriver是按照server–client的經(jīng)典設(shè)計(jì)模式設(shè)計(jì)的。
    server端就是remote server垛叨,可以是任意的瀏覽器伦糯。當(dāng)我們的腳本啟動(dòng)瀏覽器后柜某,該瀏覽器就是remote server,它的職責(zé)就是等待client發(fā)送請(qǐng)求并做出相應(yīng)敛纲;client端簡(jiǎn)單說(shuō)來(lái)就是我們的測(cè)試代碼喂击,我們測(cè)試代碼中的一些行為,比如打開(kāi)瀏覽器淤翔,轉(zhuǎn)跳到特定的url等操作是以http請(qǐng)求的方式發(fā)送給被測(cè)試瀏覽器翰绊,也就是remote server;remote server接受請(qǐng)求旁壮,并執(zhí)行相應(yīng)操作监嗜,并在response中返回執(zhí)行狀態(tài)、返回值等信息抡谐。

4. selenium環(huán)境搭建

1)python3.7
2)Firefox35(大于43)
3)selenium2框架
穩(wěn)定版 2.48.0 (pip install selenium==2.48.0)
4)瀏覽器驅(qū)動(dòng)
下載谷歌驅(qū)動(dòng)
selenium之 chromedriver與chrome版本映射表
Firefox瀏覽器對(duì)應(yīng)各個(gè)版本驅(qū)動(dòng)下載地址
firefox各個(gè)版本安裝包的下載地址
注意:Firefox35(大于43)版本不需要下載驅(qū)動(dòng)器裁奇,大于這個(gè)版本的需要,Chrome需要下載驅(qū)動(dòng)器麦撵,下邊分別演示刽肠。

5. selenium對(duì)瀏覽器操作

1)庫(kù)的導(dǎo)入

from selenium import webdriver

2)創(chuàng)建瀏覽器對(duì)象
driver = webdriver.xxx()
使用dir(driver)查看方法

# 必須為大寫(xiě)
driver = webdriver.Firefox()
driver = webdriver.Chrome()

3)瀏覽器尺寸相關(guān)操作

maximize_window()     最大化
get_window_size()     獲取瀏覽器尺寸,打印查看
set_window_size()     設(shè)置瀏覽器尺寸免胃,400*400

4)瀏覽器位置相關(guān)操作

get_window_position()     獲取瀏覽器位置
set_window_position(x,y)     設(shè)置瀏覽器位置

注意:顯示器以左上角為(0,0),所有的位置操作都是相對(duì)于顯示器左上角展開(kāi)的位移操作音五,單位是像素。
5)瀏覽器的關(guān)閉操作

close()     關(guān)閉當(dāng)前標(biāo)簽/窗口
quit()     關(guān)閉所有標(biāo)簽/窗口

6)頁(yè)面請(qǐng)求操作

driver.get(url)    請(qǐng)求某個(gè)url對(duì)應(yīng)的響應(yīng)
refresh()     刷新頁(yè)面操作
back()      回退到之前的頁(yè)面
forward()     前進(jìn)到之后的頁(yè)面

  • 案例
from selenium import webdriver
import time

# driver = webdriver.Chrome()#不可以找到杜秸,必須導(dǎo)入對(duì)應(yīng)的驅(qū)動(dòng)器
driver = webdriver.Firefox()
url1 = "http://www.baidu.com"
url2 = "https://zhuanlan.zhihu.com/"
# 請(qǐng)求第一個(gè)接口
driver.get(url1)
time.sleep(3)
# 刷新
driver.refresh()
driver.get(url2)
# 回退
driver.back()
time.sleep(3)
# 前進(jìn)
driver.forward()
time.sleep(3)
driver.close()

6. selenium獲取斷言信息

6.1 什么是斷言

斷言是編程術(shù)語(yǔ)放仗,表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真撬碟,可以在任何時(shí)候啟用和禁用斷言驗(yàn)證诞挨,因此可以在測(cè)試時(shí)啟用斷言而在部署時(shí)禁用斷言。

6.2 獲取斷言信息的操作

  • current_url 獲取當(dāng)前訪問(wèn)頁(yè)面url
  • title 獲取當(dāng)前瀏覽器標(biāo)題
  • page_source 獲取網(wǎng)頁(yè)源碼
  print(driver.current_url)
  print(driver.title)
  print(driver.page_source)

get_screenshot_as_png() 保存圖片

data = driver.get_screenshot_as_png()
with open("a.png", "wb") as f:
image
  • get_screenshot_as_file(file) 直接保存
driver.get_screenshot_as_file("b.png")

7. selenium八大元素定位

  from selenium import webdriver
  driver = webdriver.Firefox()

  # url = "http://www.baidu.com"
  # driver.get(url)

    # 第一種 id
  # ele = driver.find_element_by_id("kw")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)

  # from selenium.webdriver.common.by import By
  # ele = driver.find_element(By.ID,"kw")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)

  # 第二種 標(biāo)簽名字
  # ele = driver.find_element_by_name("wd")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)
  
  # 第三種 class
  # ele = driver.find_element_by_class_name("s_ipt")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)

  # 第四種 Xpath
  # ele = driver.find_element_by_xpath("http://*[@id='kw']")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)

  # 第五種 css class
  # ele = driver.find_element_by_css_selector("#kw")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)

  # 第六種 text
  # ele = driver.find_element_by_link_text("地圖")
  # ele.click()   # 輸入數(shù)據(jù)

  # 第七種:類(lèi)似于模糊匹配
  # ele = driver.find_element_by_partial_link_text("地")
  # ele.click()

  # 第八種:標(biāo)簽名定位呢蛤,必須得保證只有一個(gè)這種名字的標(biāo)簽惶傻,使用下面      這個(gè)搜索
  # url = "http://cn.bing.com/"
  # driver.get(url)
  # ele = driver.find_element_by_tag_name("input")
  # ele.send_keys(12306)   # 輸入數(shù)據(jù)
  1. 元素的操作
    對(duì)元素的相關(guān)操作,一般要先獲取到元素其障,再調(diào)用相關(guān)方法
    element = driver.find_element_by_xxx(value)
    1)點(diǎn)擊和輸入
    點(diǎn)擊操作---------->element.click()
    清空/輸入操作:
    element.clear()---------------------->清空輸入框
    element.send_keys(data)-------->輸入數(shù)據(jù)

案例

  1.打開(kāi)百度搜索        
  2.搜索關(guān)鍵字 selenium        
  3.清空            
  4.搜索python

2)提交操作
element.submit()

9. 多標(biāo)簽之間的切換

場(chǎng)景:有的時(shí)候點(diǎn)擊一個(gè)鏈接银室,新頁(yè)面并非由當(dāng)前頁(yè)面跳轉(zhuǎn)過(guò)去,而是新開(kāi)一個(gè)頁(yè)面打開(kāi)励翼,這種情況下蜈敢,計(jì)算機(jī)需要識(shí)別多標(biāo)簽或窗口的情況。
1)獲取所有窗口的句柄
handles = driver.window_handlers
調(diào)用該方法會(huì)得到一個(gè)列表汽抚,在selenium運(yùn)行過(guò)程中的每一個(gè)窗口都有一個(gè)對(duì)應(yīng)的值存放在里面抓狭。
2)通過(guò)窗口的句柄進(jìn)入的窗口
driver.switch_to_window(handles[n])
driver.switch_to.window(handles[n])
通過(guò)窗口句柄激活進(jìn)入某一窗口

driver.get("http://bj.58.com")
ele = driver.find_element_by_xpath(".//*[@id='fcNav']/em/a[1]")
ele.click()
# 直接報(bào)錯(cuò),原因是需要句柄
eleDaxing = driver.find_element_by_link_text("大興")
eleDaxing.click()

# 使用句柄
driver.get("http://bj.58.com")
print("點(diǎn)擊之前句柄:", driver.window_handles)
ele = driver.find_element_by_xpath(".//*[@id='fcNav']/em/a[1]")
ele.click()
list_windowns = driver.window_handles
print("點(diǎn)擊之后句柄:", driver.window_handles)
driver.switch_to.window(list_windowns[1])
eleDaxing = driver.find_element_by_link_text("大興")
eleDaxing.click()

10. 多表單切換

在網(wǎng)頁(yè)中造烁,表單嵌套是很常見(jiàn)的情況否过,尤其是在登錄的場(chǎng)景

10.1 什么是多表單

實(shí)際上就是使用iframe/frame午笛,引用了其他頁(yè)面的鏈接,真正的頁(yè)面數(shù)據(jù)并沒(méi)有出現(xiàn)在當(dāng)前源碼中苗桂,但是在瀏覽器中我們看到药磺,簡(jiǎn)單理解可以使頁(yè)面中開(kāi)了一個(gè)窗口顯示另一個(gè)頁(yè)面

10.2 處理方法

直接使用id值切換進(jìn)表單
driver.switch_to.frame(value)/driver.switch_to_frame(value)
定位到表單元素,再切換進(jìn)入
el = driver.find_element_by_xxx(value)
driver.switch_to.frame(el)/driver.switch_to_frame(el)

 from selenium import  webdriver
 #打開(kāi)游覽器
 driver = webdriver.Firefox()
 #登錄QQ
 url = "https://qzone.qq.com/"
 driver.get(url)
 #獲取元素
 #定位表單元素
 ele_bd = driver.find_element_by_id("login_frame")
 driver.switch_to.frame(ele_bd)
 ele = driver.find_element_by_xpath(".//*[@id='switcher_plogin']")
 ele.click()
 #輸入賬號(hào)
 ele2 = driver.find_element_by_id("u")
 ele2.send_keys()
 #輸入密碼
 ele3 = driver.find_element_by_id("p")
 ele3.send_keys("")     
 ele4 = driver.find_element_by_id("login_button")
 ele4.click()
  1. 彈出框操作
    進(jìn)入到彈出框中
    driver.switch_to.alert
    接收警告
    accept()
    解散警告
    dismiss()
    發(fā)送文本到警告框
    send_keys(data)
    用法:driver.switch_to.alert.accept()
    案例:
  from selenium import  webdriver
  driver = webdriver.Firefox()
  driver.get("http://www.baidu.com")
  ele_setting = driver.find_element_by_id("s-usersetting-top")
  ele_setting.click()
  ele_gaoji = driver.find_element_by_class_name("setpref")
  ele_gaoji.click()
  ele_save = driver.find_element_by_class_name("prefpanelgo")
  ele_save.click()
  driver.switch_to.alert.accept()

12.下拉框

  from selenium import  webdriver
  import time
  driver = webdriver.Firefox()
  driver.get("http://www.baidu.com")
  ele = driver.find_element_by_id("s-usersetting-top")
  ele.click()
  ele1 = driver.find_element_by_xpath(".//*[@id='s-user-setting-menu']/div/a[2]")
  ele1.click()
  time.sleep(2)
  ele2 = driver.find_element_by_xpath(".//*[@id='yadv-setting-gpc']/div/div[1]/i[1]")
  ele2.click()
  list_ele = driver.find_elements_by_class_name("c-select-item")
  print(list_ele)
  list_ele[2].click()
  # for list_i in list_ele:
#     print(list_i.text)
#     if list_i.text =="最近一周":
#         list_i.click()
  1. 鼠標(biāo)和鍵盤(pán)操作
    手動(dòng)測(cè)試時(shí)鍵盤(pán)的操作在selenium頁(yè)有實(shí)現(xiàn)煤伟,關(guān)于鼠標(biāo)的操作由ActionChains()類(lèi)來(lái)提供癌佩,關(guān)于鍵盤(pán)的操作由Key()類(lèi)來(lái)提供
    1)鼠標(biāo)操作

導(dǎo)入動(dòng)作鏈類(lèi),動(dòng)作鏈可以儲(chǔ)存鼠標(biāo)的動(dòng)作便锨,并一起執(zhí)行

  from selenium.webdriver import ActionChains
  ActionChains(driver)

鼠標(biāo)右擊

  el = driver.find_element_by_xxx(value)
  context_click(el)

對(duì)el執(zhí)行右擊

執(zhí)行ActionChains中儲(chǔ)存的所有動(dòng)作

  perform()

常用鼠標(biāo)動(dòng)作:

  ActionChains(driver).context_click(ele).perform()        點(diǎn)擊鼠標(biāo)右鍵      
  ActionChains(driver). double_click(ele).perform()        點(diǎn)擊鼠標(biāo)左鍵
  ActionChains(driver).move_to_element(el).perform() 鼠標(biāo)懸停

案例

  from selenium.webdriver import ActionChains
  from selenium import webdriver
  import time

  driver = webdriver.Firefox()
  driver.get("http://www.baidu.com")
  ele = driver.find_element_by_xpath(".//*[@id='s-top-left']/div/a")
  # ele.click()
  ActionChains(driver).double_click(ele).perform()

2)鍵盤(pán)操作
鍵盤(pán)操作使用的是Keys類(lèi),一般配合send_keys使用

導(dǎo)入

  from selenium.webdriver.common.keys import Keys

常用鍵盤(pán)操作

send_keys(Keys.BACK_SPACE)    刪除鍵(BackSpace)
send_keys(Keys.SPACE)         空格鍵(Space)
send_keys(Keys.TAB)           制表鍵(Tab)
send_keys(Keys.ESCAPE)        回退鍵(Esc)
send_keys(Keys.ENTER)         回車(chē)鍵(Enter)
send_keys(Keys.CONTROL,‘a(chǎn)’)   全選(Ctrl+A)
send_keys(Keys.CONTROL,‘a(chǎn)’)   全選(Ctrl+A)
send_keys(Keys.CONTROL,‘x’)   剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’)   粘貼(Ctrl+V)
send_keys(Keys.F1)            鍵盤(pán) F1
send_keys(Keys.F12)           鍵盤(pán) F12
  1. 瀏覽器等待
  1. 為什么要進(jìn)行等待驼卖?
    1.網(wǎng)速慢
    2.網(wǎng)站內(nèi)容過(guò)多
    3.如果不進(jìn)行等待而直接定位元素,可能會(huì)拋出異常
  2. selenium中等待的分類(lèi):

顯示等待
顯示等待是根據(jù)條件進(jìn)行等待鸿秆,等待條件出現(xiàn)
實(shí)現(xiàn):

  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
WebDriverWait類(lèi)是由WebDirver 提供的等待方法。在設(shè)置時(shí)間內(nèi)怎囚,默認(rèn)每隔一段時(shí)間檢測(cè)一次當(dāng)前頁(yè)面元素是否存在卿叽,如果超過(guò)設(shè)置時(shí)間檢測(cè)不到則拋出異常。

案例

  WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(
  (By.CLASS_NAME,"g-hu")))

思考:顯示等待與time的區(qū)別恳守?
隱式等待
隱式等待是根據(jù)是件進(jìn)行等待,等待特定時(shí)間

driver.implicitly_wait(n)
  1. n的單位為秒,n為最大值考婴,在這個(gè)最大值內(nèi)只要該界面上的全部元素都加載完成定就結(jié)束沒(méi)有加載出元素就拋出 NosuchException.
    注意:優(yōu)先隱式等待,次之顯式等待催烘,最次固定等待

15. 練習(xí)

  1. 使用游覽器登錄http://www.baidu.com
  2. 搜索淘寶官網(wǎng)
  3. 登錄用戶名和密碼
  4. 搜索商品(手機(jī)沥阱,電腦,伊群,考杉,,),給定約束條件(價(jià)格,包郵,發(fā)貨地址舰始。崇棠。。)
  5. 將商品添加到購(gòu)物車(chē)
  6. 在購(gòu)物中游覽該商品
  7. 根據(jù)自己的喜好進(jìn)行下面的操作

16. 2.IDE功能簡(jiǎn)介

image
  1. 文件:創(chuàng)建丸卷、打開(kāi)和保存測(cè)試案例和測(cè)試案例集枕稀。編輯:復(fù)制、粘貼谜嫉、刪除萎坷、撤銷(xiāo)和選擇測(cè)試案例中的所有命令。Options : 用于設(shè)置seleniunm IDE沐兰。
  2. 用來(lái)填寫(xiě)被測(cè)網(wǎng)站的地址哆档。
  3. 速度控制:控制案例的運(yùn)行速度。
  4. 運(yùn)行所有:運(yùn)行一個(gè)測(cè)試案例集中的所有案例僧鲁。
  5. 運(yùn)行:運(yùn)行當(dāng)前選定的測(cè)試案例虐呻。
  6. 暫停/恢復(fù):暫停和恢復(fù)測(cè)試案例執(zhí)行象泵。
  7. 單步:可以運(yùn)行一個(gè)案例中的一行命令。
  8. 錄制:點(diǎn)擊之后斟叼,開(kāi)始記錄你對(duì)瀏覽器的操作偶惠。
  9. 案例集列表。
  10. 測(cè)試腳本朗涩;table標(biāo)簽:用表格形式展現(xiàn)命令及參數(shù)忽孽。source標(biāo)簽:用原始方式展現(xiàn),默認(rèn)是HTML語(yǔ)言格式谢床,也可以用其他語(yǔ)言展示兄一。
  11. 查看腳本運(yùn)行通過(guò)/失敗的個(gè)數(shù)。
  12. 當(dāng)選中前命令對(duì)應(yīng)參數(shù)识腿。
  13. 日志/參考/UI元素/Rollup
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import Select
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import NoAlertPresentException
    import unittest, time, re

    class Qq(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.implicitly_wait(30)
            self.base_url = "https://qzone.qq.com/"
            self.verificationErrors = []
            self.accept_next_alert = True

        def test_qq(self):
    driver = self.driver
    driver.get(self.base_url + "/")
    # ERROR: Caught exception [ERROR: Unsupported command [selectFrame | login_frame;login_href=https%3A%2F%2Fxui.ptlogin2.qq.com%2Fcgi-bin%2Fxlogin%3Fproxy_url%3Dhttps%253A%2F%2Fqzs.qq.com%2Fqzone%2Fv6%2Fportal%2Fproxy.html%26daid%3D5%26%26hide_title_bar%3D1%26low_login%3D0%26qlogin_auto_login%3D1%26no_verifyimg%3D1%26link_target%3Dblank%26appid%3D549000912%26style%3D22%26target%3Dself%26s_url%3Dhttps%253A%252F%252Fqzs.qq.com%252Fqzone%252Fv5%252Floginsucc.html%253Fpara%253Dizone%26pt_qr_app%3D%25E6%2589%258B%25E6%259C%25BAQQ%25E7%25A9%25BA%25E9%2597%25B4%26pt_qr_link%3Dhttps%253A%2F%2Fz.qzone.com%2Fdownload.html%26self_regurl%3Dhttps%253A%2F%2Fqzs.qq.com%2Fqzone%2Fv6%2Freg%2Findex.html%26pt_qr_help_link%3Dhttps%253A%2F%2Fz.qzone.com%2Fdownload.html%26pt_no_auth%3D0 | ]]
    driver.switch_to.frame(driver.find_element_by_id("login_frame"))
    driver.find_element_by_id("switcher_plogin").click()
    # driver.find_element_by_id("uin_del").click()
    driver.find_element_by_id("u").clear()
    driver.find_element_by_id("u").send_keys("3084761668")
    driver.find_element_by_id("p").clear()
    driver.find_element_by_id("p").send_keys("dafei123457")
    driver.find_element_by_id("login_button").click()
    # ERROR: Caught exception [ERROR: Unsupported command [selectWindow | null | ]]
    # driver.find_element_by_id("tcaptcha_drag_thumb").click()

    # self.assertEqual(driver.title,"QQ空間")
    self.assertIn("QQ11空間",driver.title)
def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException as e: return False
    return True

def is_alert_present(self):
    try: self.driver.switch_to_alert()
    except NoAlertPresentException as e: return False
    return True

def close_alert_and_get_its_text(self):
    try:
        alert = self.driver.switch_to_alert()
        alert_text = alert.text
        if self.accept_next_alert:
            alert.accept()
        else:
            alert.dismiss()
        return alert_text
    finally: self.accept_next_alert = True

def tearDown(self):
    self.driver.quit()
    self.assertEqual([], self.verificationErrors)

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

作者:XiaoQu
鏈接:http://www.reibang.com/u/21209aff37c1
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有出革。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處渡讼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骂束,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子成箫,更是在濱河造成了極大的恐慌展箱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹬昌,死亡現(xiàn)場(chǎng)離奇詭異掩完,居然都是意外死亡蹈胡,警方通過(guò)查閱死者的電腦和手機(jī)堤框,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)自沧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人先紫,你說(shuō)我怎么就攤上這事治泥。” “怎么了遮精?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵居夹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我本冲,道長(zhǎng)准脂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任檬洞,我火速辦了婚禮狸膏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘添怔。我一直安慰自己湾戳,他們只是感情好贤旷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著砾脑,像睡著了一般幼驶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上韧衣,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天盅藻,我揣著相機(jī)與錄音,去河邊找鬼畅铭。 笑死氏淑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硕噩。 我是一名探鬼主播假残,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炉擅!你這毒婦竟也來(lái)了守问?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坑资,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后穆端,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體袱贮,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年体啰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了攒巍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荒勇,死狀恐怖柒莉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沽翔,我是刑警寧澤兢孝,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站仅偎,受9級(jí)特大地震影響跨蟹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜橘沥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一窗轩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧座咆,春花似錦痢艺、人聲如沸仓洼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)色建。三九已至,卻和暖如春植酥,著一層夾襖步出監(jiān)牢的瞬間镀岛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工友驮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漂羊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓卸留,卻偏偏與公主長(zhǎng)得像走越,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耻瑟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345