Behave + Selenium(Python) ------ (第三篇)


通過之前的2篇文章,大家都了解了如果利用behave和selenium打開網頁和進行基本的操作,但是這些對於項目來說,卻是往往不夠的。

如果對junit或者TestNG熟悉的人都知道有@Before Class等這些在腳本之前完成的任務:如用戶登入,以及當瀏覽器操作完,關閉瀏覽器等一些操作。那么問題來了,在behave里面是怎么控制的呢?

在behave中有個environment.py文件,environment.py文件可以很好的解決這個問題,除了解決這個問題,還可以用來解決同一條case可以在不同的瀏覽器運行的問題。

environment.py文件的介紹

environment.py文件定義了一些當測試腳本在run的過程中之前和之后完成的任務:

before_step(context, step), after_step(context, step)

在這里面的腳本會在每一個步驟之前,之后執行

before_scenario(context, scenario), after_scenario(context, scenario)

在這里面的腳本會在每一個場景之前,之后執行

before_feature(context, feature), after_feature(context, feature)

在這里面的腳本會在每一個feature之前,之后執行

before_tag(context, tag), after_feature(context, tag)

 在腳本里面可以設置tag(這個之后會介紹),這里面的腳本會在含有tag的模塊里面之前,之后執行

before_all(context), after_all(context)

這里面的腳本會在整個腳本開始之前,之后執行  ----- 一般會在這里面添加一些setup的腳本,例如啟動瀏覽器,設置一些變量,連接數據庫,關閉瀏覽器,關閉數據庫 等等

 

那我們接下來來介紹一個簡單的例子:

一、還是老規矩在feature文件夾里面新建example03文件夾,然后再新建example03.feature文件,除了這個文件之外,還需要新建environment.py文件:

from selenium import webdriver  
import sys

def before_all(context):
    reload(sys)
    sys.setdefaultencoding('utf-8')
    context.driver = webdriver.Firefox()
    
def after_tag(context, tag):
    context.browser.close()

二、example03.feature文件的內容如下:

    #../feature/example03/example03.feature
    Feature:Search behave results in baidu
    
    Scenario: Search behave results in baidu
        Given Access baidu website
        When  Input behave characters
        Then  There are more than 1 results displaying

三、在example03文件夾里面新建steps文件夾,然后在steps文件夾里面新建example03.py文件:

# This Python file uses the following encoding: utf-8
#../feature/example03/steps/example03.py

from selenium import webdriver
import time



@Given('Access baidu website')
def step_impl(context):
    context.driver.get("http://www.baidu.com")
@when('Input behave characters')
def step_impl(context):
    context.ele_input = context.driver.find_element_by_xpath("//input[@id = 'kw']")
    context.ele_input.send_keys("behave")
    context.ele_btn = context.driver.find_element_by_xpath("//input[@id = 'su']")
    context.ele_btn.click()
    time.sleep(10)
    
@Then('There are more than 1 results displaying')
def step_impl(context):
    context.ele_results = context.driver.find_element_by_css_selector("div.nums")
    context.expected_results = '相關結果'
    if context.expected_results in context.ele_results.text:
        assert True
    else:
        assert False

這一章簡單介紹environment.py文件的作用,這個文件的作用非常強大。

問題:

在我的腳本里面有個不好的地方是 time.sleep(10), 這個地方就是讓線程停止10s. 其實這里應該的做法是寫一個顯示等待的腳本。 如下:

context.ele_results = WebDriverWait(context.driver, 60).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "div.nums")))

如果出一些錯誤,那是因為你沒有把包給加進去的原因, 把下面的代碼加到程序的開頭部分,就可以了。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM