python3.7怎么用ghost.py_Python中ghost的使用 | 学步园

ghost.py is a webkit web client written in python.

from

ghost import Ghostghost = Ghost()page, extra_resources = ghost.open("http://jeanphi.fr")assert

page.http_status==200

and 'jeanphix' in ghost.content

First you need to install either PyQt or PySide that

are availables for many platforms.

Then you may install ghost.py using pip:

pip install Ghost.py

First of all, you need a instance of Ghost web client:

from

ghost import Ghostghost = Ghost()

Ghost provide a method that open web page the following way:

page,

resources = ghost.open('http://my.web.page')

This method returns a tuple of main resource (web page) and all loaded resources (such as CSS files, javascripts, images...).

All those resources are backed as HttpResource objects.

At the moment Httpresource objects provide the following attributes:

url: The resource url.

http_status: The HTTP response status code.

headers: The response headers as a dict.

Executing javascripts inside webkit frame is one of the most interesting features provided by Ghost:

result,

resources = ghost.evaluate( "document.getElementById('my-input').getAttribute('value');")

The return value is a tuple of:

last javascript last statement result.

loaded resources (e.g.: when an XHR is fired up).

As many other Ghost methods, you can pass an extra parameter that tells Ghost you expect a page loading:

page,

resources = ghost.evaluate( "document.getElementById('link').click();", expect_loading=True)

Then the result tuple wil be the same as the one returned by Ghost.open().

Fill a field

You can set a form field value trougth Ghost.set_field_value(selector, value, blur=True, expect_loading=False):

result,

resources = ghost.set_field_value("input[name=username]",

"jeanphix")

If you set optional parameter `blur` to False, the focus will be left on the field (usefull for autocomplete tests).

For filling file input field, simply pass file path as `value`.

Fill an entire form

You can fill entire form trougth Ghost.fill(selector, values, expect_loading=False):

result,

resources = ghost.fill("form", {

"username": "jeanphix", "password":

"mypassword"})

Submit the form

Yon can submit the form by firing `submit` event:

page,

resources = ghost.fire_on("form",

"submit", expect_loading=True)

Ghost provides several methods for waiting for specific things before the script continue execution:

wait_for_alert()

That wait until a javascript alert() is send.

result,

resources = ghost.wait_for_alert()

wait_for_page_loaded()

That wait until a new page is loaded.

page,

resources = ghost.wait_for_page_loaded()

wait_for_selector(selector)

That wait until a element match the given selector.

result,

resources = ghost.wait_for_selector("ul.results")

wait_for_text(text)

That wait until the given text exists inside the frame.

result,

resources = ghost.wait_for_selector("My result")

Accept or deny javascript confirm is quite easy:

with

Ghost.confirm(): # The confirm() box fired up by click will be accepted self.ghost.click('#confirm-button')with

Ghost.confirm(False): # The confirm() box fired up by click will be denied self.ghost.click('#confirm-button')

Filling a value in prompt box:

with

Ghost.prompt('my value'):

# prompt() box fired up by click will be filled with 'my value' self.ghost.click('#prompt-button')

Ghost.capture_to(path, region=None, selector=None) method let's you take webkit current frame screenshots.

If you need to capture a specific region of the viewport, just provide a selector (or coordinates tuple) that feets your needs:

ghost.capture_to('header.png',

selector="header")

Requirements:

pip install tornado

ghost.py provides a simple GhostTestCase that deals with WSGI applications:

import

unittestfrom flask import Flaskfrom ghost

import GhostTestCaseapp = Flask(__name__)@app.route('/')def

home():

return 'hello world'class

MyTest(GhostTestCase): port =

5000 @classmethod def

create_app(cls):

return app def test_open_home(self): self.ghost.open("http://localhost:%s/" % self.port) self.assertEqual(self.ghost.content,

'hello world')if __name__ ==

'__main__': unittest.main()

Debug your test

Tests can be run with a UI by setting display class member to True:

class

MyTest(GhostTestCase): display =

True

The following test tries to center http://www.openstreetmap.org/ map to France:

#

Opens the web pageghost.open('http://www.openstreetmap.org/')# Waits for form search fieldghost.wait_for_selector('input[name=query]')#

Fills the formghost.fill("#search_form", {'query':

'France'})# Submits the formghost.fire_on("#search_form",

"submit")# Waits for results (an XHR has been called here)ghost.wait_for_selector(

'#search_osm_nominatim .search_results_entry a')# Clicks first result linkghost.click(

'#search_osm_nominatim .search_results_entry:first-child a')# Checks if map has moved to expected latitudelat, resources = ghost.evaluate("map.center.lat")assert

float(lat.toString()) == 5860090.806537

Ghost provides an extension for django built on to of the upcoming LiveServerTestCase.

from

ghost.ext.django.test import GhostTestCase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值