安装Squish for Web

本部分介绍了使用Squish for Web时,针对不同浏览器和自动化方法所需的安装步骤。每个子部分针对一种浏览器或浏览器类型,并且可能进一步分成多个部分。

支持的浏览器

Squish for Web支持多种不同的浏览器和浏览器版本。下表旨在提供一个支持浏览器的概述。有关每个浏览器的更详细信息,可以在以下部分找到。

浏览器版本操作系统连接到正在运行的实例
Mozilla Firefox从12版开始Linux、macOS、Windows
Google Chrome/Chromium从40版开始Linux、macOS、Windows
Microsoft Internet Explorer9至11版Windows
Microsoft Edge从38版开始Windows
Apple Safari从9版开始macOS仅支持9至11版Safari
基于Chromium的应用程序从40版开始Linux、macOS、Windows
Opera11至12版Windows、Linux
移动设备上的浏览器所有iOS、Android

Mozilla Firefox

您可以通过在squishide服务器设置编辑 > 服务器设置打开对话框,然后选择浏览器页面。在右侧的下拉菜单中选择Firefox。已安装字段允许您指定Squish无法自动找到的firefox可执行文件。

Squish for Web需要在Firefox中安装一个扩展才能自动化浏览器。扩展的安装将自动从IDE启动,但需要手动接受扩展并关闭浏览器以完成安装。您可以从任何时间从服务器设置对话框开始扩展安装过程,但当squishide检测到缺少或扩展版本太旧时,它也会启动。您可以通过在更换到Squish安装目录后运行以下命令从终端手动开始扩展安装过程

lib/exec/browserextensionhelper installBrowserExtension firefox

Squish for Web使用单独的配置文件文件夹来在自动化会话和您的浏览器正常使用之间分隔密码和其他浏览器数据。配置文件存储在Linux和macOS上$HOME/.squish目录中的squish_firefox_profile_dir文件夹中,以及Windows上的%APPDATA%\froglogic\Squish\。当Squish第一次启动浏览器时,Firefox会创建该文件夹。

注意: Squish for Web将以一个特殊URL启动Firefox,该URL通常会导致Firefox显示服务器无响应或URL未找到的错误消息。这是正常的,也是预期的。作为初始URL传递的URL是必要的,以便从Squish传输信息到在其内部运行的扩展。扩展从URL中读取信息后,将启动记录URL或s tartBrowser命令中指定的URL。

连接到已运行的Firefox实例的设置

注意: 只有当您想使用attachToBrowser(portOrWindowTitle)函数时,才需要遵循以下说明。以下说明仅适用于您打算自动化由其他程序而不是Squish for Web直接启动的Firefox进程时。

要自动化Firefox,您需要确保Squish Firefox扩展安装在使用Firefox启动时不在Squish中用户配置文件中。安装扩展的最简单方法是打开文件浏览器,并将导航到您的Squish for Web包。从那里进入包中的lib子目录。将文件[email protected]拖放到Firefox浏览器窗口中,并确认安装。

Squish Firefox 扩展默认使用端口号 9932 与其他 Squish for Web 组件进行通信。如果该端口号已被系统中其他程序占用,您可以配置扩展程序使用其他端口号。为此,请打开 Firefox 菜单,点击 工具 文件夹,然后在子菜单中选择 扩展 项。这将打开一个新标签页,显示 Firefox 加载的所有扩展程序。确保页面左侧选中了 扩展 项。您应该在那里看到 Squish Firefox 扩展程序,下面有一个标有 选项首选项 的按钮,具体取决于您的系统。如果您点击该按钮,将弹出一个新窗口,您可以更改端口号。然后,需要将此端口号传递给 attachToBrowser(portOrWindowTitle) 函数,以连接到本例中的 Firefox 实例。

通常,如果上一次尝试失败,Firefox 会延迟一段时间后再尝试连接到指定的 WebSocket 服务器。当需要从 Squish 连接到浏览器时,这是一个问题,因为扩展程序会重复尝试连接到 Squish,但因为缺少未使用 attachToBrowser(portOrWindowTitle) 函数执行的 Squish 测试脚本,所以这次连接将会失败。因此,经过一段时间后,这些连接尝试将延迟,最终延迟时间将超过 Squish 配置的自动测试(AUT)超时,导致连接尝试失败。

可以通过在新浏览器标签页中打开特殊的 about:config URL 来禁用 Firefox 的此行为。通过点击 我会小心,我保证 按钮来确认警告。需要修改的设置是 network.websocket.delay-failed-reconnects,应将其设置为 false。您可以通过在搜索框中输入设置名称来搜索设置,并通过双击来更改它。

Google Chrome/Chromium

您可以通过在 squishide 中的 服务器设置 对话框中选中 Google Chrome/Chromium 来执行、录制和检查在 Google Chrome/Chromium 中运行的 Web 应用程序。通过 编辑 > 服务器设置 打开该对话框,然后选择 浏览器 页面。在右侧的下拉列表中选择 Google Chrome。可执行文件字段允许您在 Squish 自动找到它时指定可执行文件。

Squish for Web 需要为 Google Chrome/Chromium 安装一个扩展程序才能自动化浏览器。扩展程序的安装将自动从 IDE 中启动,但需要通过接受扩展程序并关闭浏览器手动完成。可以从 服务器设置 对话框在任何时候启动扩展程序安装过程,但当 squishide 检测到缺少或扩展程序版本过旧时,这个过程也将启动。您可以通过以下命令从终端手动启动扩展程序安装过程,在切换到 Squish 安装目录之后

lib/exec/browserextensionhelper installBrowserExtension google-chrome

为了自动化 Google Chrome/Chromium,Squish for Web 需要为 Google Chrome/Chromium 安装一个扩展程序。当您尝试运行针对 Google Chrome/Chromium 的测试或使用 启动 AUT 按钮启动浏览器时,扩展程序的安装将自动从 IDE 中启动。Squish Chrome 扩展 通过 Chrome 网上应用店进行分发。

Squish for Web 使用一个单独的配置文件夹来分离自动化会话和您正常使用浏览器之间的密码和其他浏览器数据。该配置文件夹存储在Linux和macOS上的$HOME/.squish目录中名为squish_chrome_data_dir的文件夹中,在Windows上则存储在%APPDATA%\froglogic\Squish\目录中。第一次启动Squish时,文件夹将由Google Chrome/Chromium创建。

注意: Squish for Web 将以特殊URL启动Google Chrome/Chromium,这通常会导致Google Chrome/Chromium显示服务器未响应或URL未找到的错误消息。这是正常的,也是预期的。传递给初始URL的URL是必需的,以便将信息从Squish传递到在其内部运行的Google Chrome/Chromium中的扩展程序。一旦扩展程序从URL中读取信息,它将开始加载用于录制或startBrowser命令中指定的URL。

连接到已运行的Chrome实例的设置

注意: 您只需要遵循以下说明以使用attachToBrowser(portOrWindowTitle)函数。下面的说明仅在您计划自动化由其他程序启动而不是由Squish for Web直接启动的Chrome进程时需要。

要自动化Google Chrome,您需要确保Squish Integration在Google Chrome启动时使用的用户配置文件中已加载。使Chrome使用扩展的最简单方法是启动浏览器并转到Squish Integration在Chrome商店的页面:Squish Integration。页面加载后,点击添加到Chrome按钮,并在打开的弹出窗口中确认安装。您可以通过打开Chrome菜单并选择工具然后选择扩展来验证加载扩展是否成功。这将打开一个新的选项卡,其中列出了加载到Chrome中的扩展,您应该在该列表中看到Squish Integration的条目。

默认情况下,Squish Integration使用端口9935与其他Squish for Web进行通信。如果此端口已被您系统上的其他程序使用,您可以配置扩展以使用不同的端口。要执行此操作,请打开Chrome菜单,然后单击工具并在打开的子菜单中单击扩展。这将在Chrome中打开一个新的标签页,显示加载的扩展。在Squish Integration条目下方,您会看到一个标记为选项的链接。如果您单击此链接,将弹出一个新窗口,您可以在其中更改端口号并保存更改。然后将此端口号传递给attachToBrowser(portOrWindowTitle)函数以连接到此Google Chrome实例。

Microsoft Internet Explorer

您可以通过在squishide中的服务器设置对话框中选中它来执行、录制和检查在Internet Explorer中运行的Web应用程序。使用编辑 > 服务器设置打开对话框,然后选择浏览器页面。在右侧的下拉菜单中,选择Internet Explorer

Squish不需要任何特殊设置即可自动化Internet Explorer,所有必要的设置都是在您第一次启动浏览器时自动完成的。

连接到已运行的Internet Explorer实例的设置

注意:您只需要遵循以下说明来使用 attachToBrowser(portOrWindowTitle) 函数。以下说明仅适用于您计划自动化由其他程序启动的、而非直接由 Squish for Web 启动的 Internet Explorer 窗口。

使用 Squish for Web 自动化 Internet Explorer 时,必须指导它为所有标签使用单个进程。Internet Explorer 10 及更高版本通常会使用多个进程来渲染网站,可在任务管理器中看到。

可以通过使用注册表编辑器更改注册表设置,指令 Internet Explorer 只使用一个进程。可以通过打开“Windows”菜单,然后开始键入 regedit 并选择运行 regedit 命令的条目来打开编辑器。

注册表编辑器会在左侧显示一个树形结构,找到条目 HKEY_CURRENT_USER 并展开它。根据树形结构展开 Software 条目,下面是 Microsoft,最后在 Microsoft 内展开 Internet Explorer。在本节中有一个名为 Main 的条目,一旦选中,您会在编辑器的右侧看到一些键。应该有一个名为 TabProcGrowthDWORD 条目。必须将 TabProcGrowth 条目设置为 0,以便 Squish for Web 在附加到 Internet Explorer 之后能够自动化。一旦完成,请确保重新启动任何正在运行的浏览器实例。

Microsoft Edge 在 Windows 上

Windows 上的 Microsoft Edge 支持是通过 Edge 驱动程序实现的。Edge 驱动程序与 Squish 一起分发,因此您必须从 Microsoft 下载它: 下载 Microsoft Edge 驱动程序。它被认为是一种开发人员工具,并有时作为管理员策略的一部分被禁用。它需要注册值 DeveloperToolsAvailability 为 0 或 1。否则,Squish 将无法自动化 Edge 浏览器。

在使用 Edge 驱动程序时,Squish 不会直接启动浏览器,而是启动 Edge 驱动程序。由于 Edge 驱动程序的可执行文件可以位于系统上的任何位置,因此您需要向 Squish 提供Edge 驱动程序的路径。如果使用 IDE,可以在 编辑 > 服务器设置 > 浏览器 下的 服务器设置对话框 中的“浏览器-可执行文件”字段进行设置。如果不使用 IDE,可以将环境变量 SQUISH_BROWSERPATH 设置为指向 Edge 驱动程序的可执行文件。

使用 Squish 与 Microsoft Edge 一起使用时已知的问题

Microsoft Edge 的支持仍然处于早期阶段,因此存在一些已知的问题。

  • 不支持切换到全屏模式。
  • 标签支持仅限于回放。在录制过程中,仅支持单个标签。如果在录制过程中尝试打开多个标签或尝试切换标签,则焦点将始终回到初始标签。
  • automateLogin(username, password) 不受支持。一般来说,带有原生登录对话框的网站不受支持。
  • 在开始录制时,有时浏览器窗口会在初始化完成之前打开,这可能导致事件没有被记录。请确保 Squish 录制控制条已打开。
  • 在加载新页面时, Squish 可能会记录到一个 100ms 的间隙,在这个时间内没有事件被记录。
  • 当加载新页面且该页面具有不同的源或域名时,可能丢失在页面更改发生之前直接记录的事件。
  • HTML输入字段上的拖放操作不可靠。作为一种解决方案,您可以设置相对X拖放位置为1,然后拖放项目。或者,在拖放调用之间调用 mouseMove(x, y) (鼠标移动坐标应该是目标坐标加上1)。这可能是Microsoft Edge处理拖放事件的一般性问题,因此也可能适用于其他场景。
  • 如果在执行测试脚本后Edge驱动程序发生崩溃,您可能需要增加SoftExitTimeout: 配置squishrunner

基于Chromium的应用程序

通过Chrome的WebDriver支持在基于Chromium的应用程序中自动化网络内容。WebDriver不会与Squish一起分发,因此您需要从谷歌下载。 下载Chromium WebDriver

注意:不同的Chromium版本需要使用不同版本的chromedriver可执行文件,特别是新版本的chromedriver可能不支持旧版本的Chromium。要找到正确的chromedriver可执行文件,您需要确定应用程序中使用的Chromium的确切版本,并检查以上链接的下载页面上的chromedriver发行说明,以找到适合您应用程序的chromedriver版本。可以通过点击任何一个较新的下载链接,然后进入上一层目录来访问旧版本发布,这会带您到一个列出所有版本的 目录

为了让Squish找到已下载的Chromium webdriver可执行文件,请将其放置在您的PATH中的目录下。作为替代方案,您可以在Squish安装的etc目录中的webwrapper.ini文件中配置位置。使用文本编辑器打开文件,并将以'ChromeDriverForChromiumBasedApps'开头的行中的'chromedriver'值替换为下载的chromedriver可执行文件的绝对路径。在Windows中,必须复制路径中的反斜杠以满足文件的格式要求。

注意:要自动化使用nw.js的应用程序,请使用作为nw.js SDK下载部分提供的chromedriver可执行文件,因为标准chromedriver似乎在撰写此文档时没有正常工作。

为了让Squish了解您的基于Chromium的应用程序,请在IDE的服务器设置对话框中将它作为浏览器可执行文件选中。可以通过打开编辑菜单并选择其下的服务器设置子菜单来访问此对话框。在此子菜单中选择标有浏览器的条目。在对话框中填写Chromium-based Applications (using CEF, Electron, nw.js etc.)下的字段,并确保选中此条目。

如果您不使用IDE,可以将环境变量SQUISH_BROWSERPATH设置为指向您的应用程序。

连接到已运行的基于Chromium的应用程序的设置

注意:仅当您想使用attachToBrowser(portOrWindowTitle)函数时,才需要遵循以下说明。以下说明仅适用于您计划自动化由某些其他程序启动而不是由Squish for Web直接启动的基于Chromium的应用程序。

要将Squish配置为自动化基于Chromium的应用程序,请参考基于Chromium的应用程序中的说明。配置基本完成之后,在应用程序的Chromium部分启用远程调试特性。该特性有时会作为一个名为--remote-debugging-port的命令行标志进行暴露,但也可以通过你的应用程序中的代码来设置。用于远程调试端口的端口号需要传递给测试脚本中的attachToBrowser(portOrWindowTitle)函数,以便连接到应用程序中的Chromium网络内容。

使用Squish与基于Chromium的应用程序时可能遇到的已知问题

  • 不支持使用窗口交互方法(最大化、最小化、设置为全屏、更改大小),因为Squish只控制网络内容但不是整个应用程序。
  • 与应用程序中的多个网络视图互动是可能的,但仅限于其内的网络内容。Squish无法使它们可见/不可见或将某视图置前,就像人类用户做的那样。
  • 屏幕截图验证和视觉验证将使用桌面截图方法进行,这要求待验证的网络视图在屏幕上完全可见。例如,如果网络视图是应用中另一个标签页的一部分则无法获取。此外,在抓取屏幕截图时,基于Chromium的应用程序不应被其他应用程序覆盖,因为截图将包含那些覆盖网络视图的应用程序。
  • 布尔isBrowserDialogOpen()函数在基于Chromium的应用程序中始终返回false。

Safari

您可以通过在中的Server Settings对话框中选择Safari来执行、记录和检查在Safari中运行的Web应用程序。使用Edit > Server Settings打开对话框,然后选择Browser页面。在右侧的下拉菜单中选择Safari

Safari 12或更新版在macOS 10.13或更新版

注意:自动化Safari 12时也有一系列限制和一些需要注意的事项,请参阅限制部分。

启用自动化的手动设置步骤

由于Safari 12不再支持Squish之前所依赖的插件,因此Squish采用了基于Safari对WebDriver支持的另一种自动化机制。为了允许通过Safari的WebDriver进行自动化,您必须通过Develop菜单来启用它。此菜单选项通常是隐藏的,但是可以通过打开Safari的偏好设置并选择高级标签页来显示。确保在标签页上已选中Show Develop menu in menu bar选项。

一旦显示Develop菜单,请打开它并确保已选中Allow Remote Automation选项。

启用自动化的半自动化设置步骤

在不启动浏览器并通过Develop菜单的情况下启用Safari的自动化是可能的。Safari的webdriver工具safaridriver允许通过其命令行参数启用远程自动化。您可以像以下示例那样调用safaridriver,并提供管理员密码以启用自动化。请确保在进行此操作时系统上没有运行Safari。

启用safaridriver --enable

限制

通过WebDriver协议自动化Safari以及Safari在此协议下的自动化行为,对测试脚本所能执行的操作施加了一定限制。

特别是Safari是在一个独立专用的会话中执行的,该会话不与正常浏览会话共享任何数据,因此cookie和其他数据不会从正常浏览会话中接管。

除此之外,以下限制也适用:

  • 不支持记录或选择对象。由于Safari在窗口上出现原生点击时就会结束自动化过程,因此Squish无法接收此类点击事件(或文本输入),因此无法记录交互或选择元素。只能通过应用程序对象视图的树状图执行脚本执行和对象结构的导航。
  • 不支持通过mousePress/mouseRelease函数执行本机文本输入(nativeType)或本机鼠标输入。Safari禁止在特殊自动化会话中发生原生事件,如果尝试则会造成自动化过程的终止。
  • 对nativeMouseClick函数的支持有限。可以使用带有HTML对象的重载,但相对坐标将被忽略,只能执行左键点击。WebDriver协议仅允许使用左键点击中心位置的HTML元素。
  • Squish的automateLogin函数(用于一些网站上的基本HTTP认证对话框)无法使用。该函数使用原生事件,可能会打断自动化会话,而WebDriver协议不提供与这些对话框交互的方法。必须在其他方式下通过此类网站登录。
  • 自动化文件上传需要确保用于实际文件上传的输入元素是可见和可交互的。隐藏此HTML元素并显示自定义上传按钮的网站需要一些手动脚本,使隐藏的输入字段可见,然后通过setText等自动化该字段,类似于以下代码片段。
    hiddenInput = waitForObjectExists({"tagName":"INPUT", "id":"userfile"})
    hiddenInput.setProperty("style", "display:block;visibility:visible")
    snooze(1)
    setText(hiddenInput, "/Users/andreas/dummyfile.txt")
  • 活动浏览器标签将定期更改。为了使用WebDriver协议,需要对某些操作激活活动标签。在Safari中,这样的活动更改还会在UI中视觉上更改活动标签。由于Squish在正常操作期间在幕后执行此类操作,可能会发生标签的“闪烁”。

macOS 10.11.5或更晚版本的Safari

macOS 10.11.5更新了随系统提供的Safari版本,现在默认禁止通过AppleScript在网页中执行JavaScript代码。Squish依赖于此方法来执行JavaScript,因此在使用macOS 10.11.5或更高版本的Safari时,有必要再次启用此支持。

要启用此选项,需要确保Safari显示“开发”菜单。可以通过打开Safari的首选项,然后选择“高级”选项卡并确保已勾选“在菜单栏中显示“开发”菜单”选项来实现。

一旦菜单栏中可用“开发”菜单,请打开它并确保已勾选“允许通过Apple事件执行JavaScript”选项。这使Squish for Web能够在macOS 10.11.5和更高版本的Safari上自动化。

至12版版的Opera

您可以通过在 squishide服务器设置 对话框中选择它来执行、记录和检查运行在Opera中的Web应用程序。使用 编辑 > 服务器设置 打开对话框,然后选择 浏览器 页面。在右侧下拉菜单中选择 Opera

版本至12的Opera浏览器使用自己为代理服务器设置的配置设置。这使得您必须手动将其配置为使用Squish for Web代理,以便Squish能够自动化运行在Opera中的网站。

配置代理可以在Opera的设置中进行,可以通过选择“设置”菜单项然后在其子菜单中选择“设置”来打开。在出现的对话框中,需要选择标签“高级”,以便访问网络配置。左侧列表中有一个名为“网络”的对应条目,需要选择它。在对话框中点击“代理服务器”按钮以配置Opera使用的代理服务器。在新打开的对话框中,确保选中“使用手动代理服务器配置”的单选按钮并检查“HTTP”旁边的复选框。需要将“proxyserver”和“port”字段分别填写为“localhost”和“8000”。另外,向下进一步激活“使用代理服务器本地服务器”的复选框,以便能够测试随Squish一起提供的地址簿应用程序。

除了配置代理,还需要禁用Opera中的“崩溃恢复”对话框。由于Squish for Web无法自动化此对话框,否则它会在Squish退出浏览器后并在Opera每次启动时出现,这将导致测试执行中止。需要在Operas配置编辑器中更改此设置,可以通过在地址栏中输入“about:config”来打开它。打开的页面允许搜索特定设置。使用“Problem”作为搜索关键字,它将揭示启用和禁用对话框的配置条目。设置的标题是“显示问题对话框”,需要通过取消选中旁边的复选框来禁用配置条目。

以上完成了为使用Squish设置Opera所需的步骤。现在可以在IDE中选中Opera可执行文件作为浏览器,并使用它记录和回放测试。

注意:目前Squish for Web不支持12版本之后的Opera。

移动设备上的浏览器

本节假设已按照在从二进制包安装中说明的方法在桌面操作系统上安装了Squish for Web 6.1或更高版本。

注意:示例中包含系统提示符号,可能与实际情况不同,在Windows上,命令不包括开头的./

启动HTTP代理

注意:在继续操作之前,请在macOS上确认已安装Python 2.6或更高版本。

通过控制台执行以下命令以启动HTTP-Proxy服务器(此操作使用默认HTTP代理服务器端口8000)

$ ./bin/webproxy/proxy

有关webproxy支持选项的详细信息,请参阅Web代理

配置设备代理连接

将您的移动设备或平板电脑连接到与计算机相同的网络,并按照以下方式配置设备以使用计算机的代理服务器

  • Android设备
    1. 从设置中,点击Wi-Fi
    2. 长按当前正在使用的无线网络连接,然后选择修改网络
    3. 点击显示高级选项复选框
    4. 点击代理框并选择手动
    5. 代理主机名框中输入计算机的IP地址或名称
    6. 代理端口框中输入8000,这是HTTP代理的标准端口
    7. 点击保存
  • iOS设备
    1. 从设置中,点击Wi-Fi
    2. 点击当前正在使用的无线网络连接的信息按钮(i)
    3. 在HTTP PROXY部分点击手动
    4. 服务器框中输入计算机的IP地址或名称
    5. 端口框中输入8000,这是HTTP代理的标准端口
    6. 点击<Wi-Fi
  • 测试设备连接

    为了测试连接,在设备上打开浏览器,并导航到 "http://<anyURL>/startsquish/"。浏览器页面将加载:"Squish/Web 自动化 GUI 测试 等待下一个测试用例的启动..."

为 Web IDE 配置 Squish

从电脑上打开 Squish(Web)IDE,选择 编辑 > 服务器设置 > 浏览器,并选择 移动设备上的浏览器 选项。

这已完成 Squish for Web 的特定设备设置!现在您可以使用电脑上的 squishide 来记录和播放测试,就像使用标准 Web 测试一样;但现在,在录制时,所有操作都发生在设备上——而且当然,回放也发生在设备上。

限制

截至发布时,与桌面上的 Web 测试相比,在设备上测试浏览器有一些局限性。最显著的已知局限性包括

  • 不支持测试原生对话框;这包括文件上传字段。
  • 不能使用一个代理为多个并行测试执行/录制。
  • 使用手动启动的浏览器/代理时,不支持与弹出窗口阻止程序一起使用;测试之前需要禁用浏览器中的弹出窗口阻止程序。
  • 不能将截图验证点用于远程浏览器(iPhone/iPad 浏览器测试),这是由于 webhook 中的截图代码完全是 C++ 代码。
  • 目前在 iOS 上的 Safari 中,无法识别/记录/回放复杂的触摸/手势事件。简单的敲击操作是有效的。
  • 不支持 HTTPS 协议。
  • Windows:有时只选择整个浏览器窗口和按钮是有效的。这可以通过重命名 SQUISHDIR\bin\winhook.dll 来解决。
  • 浏览器始终显示 "会话未正确结束" 对话框。这是由于我们退出浏览器的方式;通常浏览器都有一个设置来避免对话框。
  • 浏览器始终显示进度指示器。这是由于 Squish/Web 和代理之间的内部通信方式。

©2024 The Qt Company Ltd. 本文档中的文档贡献包括其各自所有者的版权。
提供的文档根据 Free Software Foundation 发布的 GNU 自由文档许可版本 1.3 的条款进行许可。
Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。