自动测试,可以用来做GUI测试。
telenium的Python项目详细描述
#telenium为远程测试或控制基于kivy的应用程序提供了一个框架:
-使用类似xpath语法的选择器支持(`//boxlayout[0]/button[@text~="close"]`)
-通过触摸ui创建选择器代码
-`unittests`支持
-集成为kivy模块
-web ide
-python 2和3(从0.4版开始,使用json-rpc)
![Telenium IDE](https://cloud.githubusercontent.com/assets/37904/22790912/f44b8166-eee7-11e6-9a78-120f78bde220.png)
![Telenium IDE导出](https://cloud.githubusercontent.com/assets/37904/22791059/70fb6988-eee8-11e6-91f4-0b87af33b5b6.png)
在您最喜欢的WebBrowser中打开一个新的
选项卡。您将能够配置main.py
的位置,并直接开始编写测试:
`````
``````
````
`>```>telenium json:
`````
``````
telenium tests/test ui myfeature.json
```
"不要使用IDE,为了远程控制你的应用程序,
你需要在你的应用程序中安装Telenium客户端。
r/>`` python
python-m telenium.execute m a in.py
```
方法2:将telenium_客户端作为kivy模块添加到应用程序中
os.path import dirname
从kivy.modules import modules
从kivy.config import config
modules.add_path(dirname(uu file_uu))
config.set("modules","telenium_u client","")
`````
还需要在依赖项中添加"python jsonrpc"(pip install python jsonrpc`)
#连接到Telenium就绪的应用程序
我们有一个命令行客户端可供使用。应用程序启动后,
您可以连接到:
$python-m telenium.client localhost
然后使用它。` cli是telenium客户机,您可以在其中调用远程
命令。请参阅"telenium commands"以了解可以执行的操作:
``python
>;>;id=cli.pick();然后单击ui
>;>;cli上的某个位置。单击(id)
true
>;>;cli.setattr("//label","color",(0,1,0,1))
true
````
意味着它已经成功了,否则它将返回none.
目前,它已经过测试和编码,只能使用子流程在本地工作。
附加方法:
-`assertexists(selector,timeout=-1)`和
`assertnotexists(selector,timeout=-1)`来检查应用程序中是否存在选择器
。它们都有一个"timeout"参数,如果达到该参数,则测试将失败。
-`cli.wait掴click(selector,timeout=-1)`:等待选择器匹配的简单方法,
然后单击第一个小部件。
在菜单中单击需要保存CSV的位置(`SaveButton`,`CascadeSaveButton`然后`SaveCsvButton`)
-然后在最多2秒的时间等待弹出窗口显示标签"Export to CSV"
-然后单击弹出窗口中的"Close"(关闭)按钮
-然后通过检查标签i确保弹出窗口已关闭不见了。
示例:
``python
from telenium.test s import teleniumtestcase
class uitestcase(teleniumtestcase):
cmd_entrypoint=["main.py"]
def test_export_csvelf):
self.cli.wait\u click("//savebutton")
self.cli.wait\u click("//cascadesavebutton")
self.assertexists("//label[@text~=\"export to csv\"],timeout=2)
self.cli.wait\u click("//fitbutton[@text=\"close\",timeout=2)
self.assertnotexists("////label[@text~=\"export to csv\"],timeout=2)
````
每个新的TeleniumTestCase都将关闭并启动应用程序,因此您总是从干净的应用程序运行。如果在开始
测试之前总是需要做一些事情,那么可以重载"init"。这将在类中的任何
测试开始之前执行一次:
`` python
类uitestcase(teleniumtestcase):
def init(self):
self.cli.wait\u click("//presetselectionitem[@text!~=\"ttyusb0 on mintel\",
timeout=10)
self.cli.wait\u click("//button[@text=\"connect\")
self.cli.wait("//bottomlabel[@text=\"done\",timeout=10)
`````
r/>类uitestcase(teleniumtestcase):
process_start_timeout=5
cmd_env={"i_am_running_test":1}
````
telenium commands
`version()`(api v1)
返回当前api版本。您可以使用它来了解哪些方法是可用的。
>``python
>>>gt;cli.version()
>1
````
`select(selector)`(api v1)
>
>
>``python
>gt>gt>gt>cli.cli.select(///label)
>1
>1
>````````````````````]",u"/windowsdl/gridlayout/label[1]]
`````
``getattr(选择器,键)``(api v1)`(api v1)`(api v1)`
>
>返回由"选择器"找到的第一个小部件上的属性值。
```python
>;cli.getattr("///label","text")
>u"你好世界"
``````
`>getattr(///label,"/text"
>u"你好世界"
```````````````````````值)`(API v1)
`对于所有匹配
`selector`.
>
>
``python
>>>gt;cli.setattr(///label,"///label,""text,""plop")
true
````
>
`element(selector)`(api v1)`(api v1)
>return`true`如果至少有一个小部件匹配"selector`.
>``python
>
>;gt;gt;cli.element("///label""///label")")>
正确t;cli.element("//invalidbutton")
false
````
``execute(code)`(api v1)
execute python code in the application.只有指向当前正在运行的应用程序的"app"符号可用。如果代码执行,则返回true;如果代码失败,则返回
false。例外情况是使用应用程序日志打印。
``python
>;>cli.execute("app.call_one_app_method")
true
````
`pick(all=false)`(api v1)
在触摸屏幕的地方。
``python
>>>gt;cli.pick()
>u'/windowsdl/button[0]
>>gt>gt>gt;cli.pick(all=true)
[u'/windowsdl/button[0]'/u'/windowsdl']
```
` ``点击(选择器)``(api v1)`(api v1)`(api v1)`(api v1)`(api v1)`(api v1)`(api v1)`>br/>
/>br/>模拟触摸/上下/上下/上下/上下与"selector"匹配的第一个小部件。如果成功,则返回
true。
``python
>;>cli.单击"打开"("//button[0)"
`true
````
树:`/class`
-选择具有属性的小部件`/class[<;attr selector>;,…]`
-如果存在多个匹配项,则索引选择器:`/class[index]`
-属性存在:`@attr`
-属性等于一个值:`@attr=value`
-a属性不等于值:`@attr!=值`
-属性包含值:`@attr~=值`
-属性不包含值:`@attr!~=value`
-value可以是一个字符串,但只能在双引号内转义。
一些示例:
``
选择应用程序中的所有boxlayout
//boxLayout[0]/按钮
n输入"close"
//boxlayout[0]//button[@text~="close"]
````
-使用类似xpath语法的选择器支持(`//boxlayout[0]/button[@text~="close"]`)
-通过触摸ui创建选择器代码
-`unittests`支持
-集成为kivy模块
-web ide
-python 2和3(从0.4版开始,使用json-rpc)
![Telenium IDE](https://cloud.githubusercontent.com/assets/37904/22790912/f44b8166-eee7-11e6-9a78-120f78bde220.png)
![Telenium IDE导出](https://cloud.githubusercontent.com/assets/37904/22791059/70fb6988-eee8-11e6-91f4-0b87af33b5b6.png)
在您最喜欢的WebBrowser中打开一个新的
选项卡。您将能够配置main.py
的位置,并直接开始编写测试:
`````
``````
````
`>```>telenium json:
`````
``````
telenium tests/test ui myfeature.json
```
"不要使用IDE,为了远程控制你的应用程序,
你需要在你的应用程序中安装Telenium客户端。
r/>`` python
python-m telenium.execute m a in.py
```
方法2:将telenium_客户端作为kivy模块添加到应用程序中
os.path import dirname
从kivy.modules import modules
从kivy.config import config
modules.add_path(dirname(uu file_uu))
config.set("modules","telenium_u client","")
`````
还需要在依赖项中添加"python jsonrpc"(pip install python jsonrpc`)
#连接到Telenium就绪的应用程序
我们有一个命令行客户端可供使用。应用程序启动后,
您可以连接到:
$python-m telenium.client localhost
然后使用它。` cli是telenium客户机,您可以在其中调用远程
命令。请参阅"telenium commands"以了解可以执行的操作:
``python
>;>;id=cli.pick();然后单击ui
>;>;cli上的某个位置。单击(id)
true
>;>;cli.setattr("//label","color",(0,1,0,1))
true
````
意味着它已经成功了,否则它将返回none.
目前,它已经过测试和编码,只能使用子流程在本地工作。
附加方法:
-`assertexists(selector,timeout=-1)`和
`assertnotexists(selector,timeout=-1)`来检查应用程序中是否存在选择器
。它们都有一个"timeout"参数,如果达到该参数,则测试将失败。
-`cli.wait掴click(selector,timeout=-1)`:等待选择器匹配的简单方法,
然后单击第一个小部件。
在菜单中单击需要保存CSV的位置(`SaveButton`,`CascadeSaveButton`然后`SaveCsvButton`)
-然后在最多2秒的时间等待弹出窗口显示标签"Export to CSV"
-然后单击弹出窗口中的"Close"(关闭)按钮
-然后通过检查标签i确保弹出窗口已关闭不见了。
示例:
``python
from telenium.test s import teleniumtestcase
class uitestcase(teleniumtestcase):
cmd_entrypoint=["main.py"]
def test_export_csvelf):
self.cli.wait\u click("//savebutton")
self.cli.wait\u click("//cascadesavebutton")
self.assertexists("//label[@text~=\"export to csv\"],timeout=2)
self.cli.wait\u click("//fitbutton[@text=\"close\",timeout=2)
self.assertnotexists("////label[@text~=\"export to csv\"],timeout=2)
````
每个新的TeleniumTestCase都将关闭并启动应用程序,因此您总是从干净的应用程序运行。如果在开始
测试之前总是需要做一些事情,那么可以重载"init"。这将在类中的任何
测试开始之前执行一次:
`` python
类uitestcase(teleniumtestcase):
def init(self):
self.cli.wait\u click("//presetselectionitem[@text!~=\"ttyusb0 on mintel\",
timeout=10)
self.cli.wait\u click("//button[@text=\"connect\")
self.cli.wait("//bottomlabel[@text=\"done\",timeout=10)
`````
r/>类uitestcase(teleniumtestcase):
process_start_timeout=5
cmd_env={"i_am_running_test":1}
````
telenium commands
`version()`(api v1)
返回当前api版本。您可以使用它来了解哪些方法是可用的。
>``python
>>>gt;cli.version()
>1
````
`select(selector)`(api v1)
>
>
>``python
>gt>gt>gt>cli.cli.select(///label)
>1
>1
>````````````````````]",u"/windowsdl/gridlayout/label[1]]
`````
``getattr(选择器,键)``(api v1)`(api v1)`(api v1)`
>
>返回由"选择器"找到的第一个小部件上的属性值。
```python
>;cli.getattr("///label","text")
>u"你好世界"
``````
`>getattr(///label,"/text"
>u"你好世界"
```````````````````````值)`(API v1)
`对于所有匹配
`selector`.
>
>
``python
>>>gt;cli.setattr(///label,"///label,""text,""plop")
true
````
>
`element(selector)`(api v1)`(api v1)
>return`true`如果至少有一个小部件匹配"selector`.
>``python
>
>;gt;gt;cli.element("///label""///label")")>
正确t;cli.element("//invalidbutton")
false
````
``execute(code)`(api v1)
execute python code in the application.只有指向当前正在运行的应用程序的"app"符号可用。如果代码执行,则返回true;如果代码失败,则返回
false。例外情况是使用应用程序日志打印。
``python
>;>cli.execute("app.call_one_app_method")
true
````
`pick(all=false)`(api v1)
在触摸屏幕的地方。
``python
>>>gt;cli.pick()
>u'/windowsdl/button[0]
>>gt>gt>gt;cli.pick(all=true)
[u'/windowsdl/button[0]'/u'/windowsdl']
```
` ``点击(选择器)``(api v1)`(api v1)`(api v1)`(api v1)`(api v1)`(api v1)`(api v1)`>br/>
/>br/>模拟触摸/上下/上下/上下/上下与"selector"匹配的第一个小部件。如果成功,则返回
true。
``python
>;>cli.单击"打开"("//button[0)"
`true
````
树:`/class`
-选择具有属性的小部件`/class[<;attr selector>;,…]`
-如果存在多个匹配项,则索引选择器:`/class[index]`
-属性存在:`@attr`
-属性等于一个值:`@attr=value`
-a属性不等于值:`@attr!=值`
-属性包含值:`@attr~=值`
-属性不包含值:`@attr!~=value`
-value可以是一个字符串,但只能在双引号内转义。
一些示例:
``
选择应用程序中的所有boxlayout
//boxLayout[0]/按钮
n输入"close"
//boxlayout[0]//button[@text~="close"]
````