Flex 开发入门

2023-11-12

   

 
<script type="text/javascript"></script>
 

<script type="text/javascript"></script>
 


级别: 初级

刘 庆 (qlcdl@cn.ibm.com), 软件工程师, IBM 软件开发中心

2009 年 1 月 07 日

本文介绍 Flex 开发的基础知识:包括如何搭建开发环境,如何调试,以及如何建立和部署简单的 Flex 项目。通过本文的学习,可以为您将来深入地学习 Flex 打下良好的基础。

开始之前

Flex 作为富 Internet 应用(RIA)时代的新技术代表,自从 2007 年 Adobe 公司将其开源以来,Flex 就以前所未有的速度在成长。很多公司,包括 IBM 都纷纷加入了 Flex 开发的阵营当中。很多开发人员也按捺不住 Flex 的“诱惑”而准备从事 Flex 开发。本文主要讲述 Flex 开发的基础知识,主要是关于开发环境的搭建,以及介绍简单的 Flex 项目创建、编码、调试以及部署的过程和 Flex 编程的基本知识。通过本文的学习,您将会学习如何搭建 Flex 基本的开发环境以及开发、调试和部署方面的基础知识。为您以后深入系统的学习 Flex 打下良好的基础。

要学习本文,您需要有一定的 Web 编程经验和 Eclipse FireFox 使用经验。

代码示例和安装要求

本文所有示例均在 Windows XP SP3 系统中测试完成。您需要一台能流畅运行 Windows XP 系统的机器,除此之外您还需要一些工具才能试用本文中的代码。所有这些工具都可以免费下载(参见 参考资源):

  • Java SDK 1.5 或更高版本
  • Tomcat 6.0 或更高版本
  • Eclipse 3.3 或更高版本
  • Flex Builder 3.0 或更高版本
  • FireFox2.0 或更高版本





回页首

安装配置开发环境

接下来我们便迫不及待的开始吧!首先搭建我们的开发环境,为了减少因为环境不一致而引起的问题,建议读者使用与本文相同的软件版本:

  • 下载 并安装 JDK( 本文使用版本为 Sun JDK 6) ;
  • 下载 并解压 Eclipse( 本文使用版本为 Eclipse Ganymede J2EE 版本,含 WTP 插件 );
  • 下载 并安装 Flex Builder Eclipse 插件版 ( 本文使用的 Flex Builder 版本为 3.0.1);
  • 下载 并安装 Tomcat( 本文使用版本为 Tomcat6.0.18);
  • 下载 并安装 FireFox( 由于 Flex3.0 和一些插件的兼容性问题,本文使用 FireFox2.0.0.17)

小提示

Flex Builder 提供两个版本,一个是 All in one 的版本,另外一个是 Eclipse 的插件版,All in one 的版本内置了一个 Eclipse 的基本核心,插件不全。所以我们采用单独下载 Eclipse 和安装 Flex Builder 插件版的方式。另外在安装过程中不要安装 FlashPlayer 到 IE 或者 FireFox 上。我们在接下来的步骤中将单独安装 debug 版本的 Flash Player 。

大家知道 Flex 代码编译后是一个 SWF 文件,运行在 Flash Player 中,要想看到 SWF 文件在运行时输出的一些调试信息是比较困难的。所以在安装好基本的软件之后,我们要安装一些便于我们调试 Flex 的 FireFox 插件:

下载 并安装 debug 版本的 FireFox Flash Player 插件 ( 本文使用的版本为 Flash Player10)

打开 FireFox,到 FireFox 的 扩展组件站点 上搜索并安装 HttpFox,FlashTracer,Cache Status 三个插件,如图 1 所示。


图 1:开发调试需要的 FireFox 插件
图 1:开发调试需要的 FireFox 插件

小提示

在 Debug 版本的 Flash player 和 FlashTracer 插件完成好之后,我们发现 FlashTracer 并不能正常的显示用 trace 语句输出的调试信息。为了使其能够工作,还需要先点击图 1 中的 FlashTracer 设置按钮来设置日志文件的输出路径。并且输出的日志文件路径对于 Windows XP 来说必须是 C:/Documents and Settings/Administrator/Application Data/Macromedia/Flash Player/Logs/flashlog.txt 。

在安装了 Debug 版本的 Flash Player 之后,Flash Tracer 能显示您在程序中用 trace() 语句输出的调试信息,HttpFox 插件不仅能查看 HTTP 通信的过程和数据,还能看到哪些内容是从 Cache 里面读取的。另外,Cache Status 插件可以让我们方便的管理缓存。在 Flex 开发过程中,往往需要先清除掉缓存中的内容,才能看到新改动的效果。

接下来我们打开 Flex Builder, 在菜单Window>Preferences>Server>Runtime Environment中设置我们的 Tomcat6 以及在菜单Window>Preferences>General>Web Browser中设置浏览器为外部浏览器 FireFox,如图 2 和图 3 所示:


图 2:配置 Tomcat
图 2:配置 Tomcat

图 3:设置默认浏览器
图 3:设置默认浏览器

到此为止,我们的开发环境算是彻底搭建完毕,可以看出这个过程并不算是特别简单。别急,先苦后甜,小憩一下,让我们来享受一下 Flex 开发带来的乐趣吧!





回页首

Flex 的 Hello World !

创建项目

打开 Flex Builder, 如图 4 所示,新建一个 Flex 项目:


图 4:新建 Flex 项目
图 4:新建 Flex 项目

在图 5 所示设置页面中,我们选择项目类型是 Web application,关于 AIR 类型应用的基础知识可参考 developerWorks 上的另一篇文章《使用 Adobe AIR 和 Dojo 开发基于 Ajax 的 Mashup 应用》。 Application server type 我们以 J2EE 为例,并且不要钩选 Use remote object access service, 关于这些高级内容,我们将在后续的文章中陆续讨论。最后我们使用 Eclipse Ganymede J2EE 版本内置的 WTP(Web Tools Platform) 来创建一个后端使用 Java 前端使用 Flex 的 RIA 项目。在默认设置下,src 是 Java 代码的源代码文件夹。


图 5:设置 Flex 项目
图 5:设置 Flex 项目

在后续的设置页面中,我们配置项目运行时的 J2EE server 为我们在安装配置开发环境部分中配置的 Tomcat6 如图 6 所示:


图 6:配置运行时 J2EE Server
图 6:配置运行时 J2EE Server

点击 Next,在下一个页面中一切都按照默认设置即可。如图 7 所示,Main source folder 是设置默认的 flex 代码 ( 包括 mxml 和 Action script) 的源文件夹,Main application file 是项目默认的主应用。 Out folder URL 是项目运行在我们配置的 Tomcat 上时的 URL.


图 7:其他属性设置
图 7:其他属性设置

一切完成之后,我们来看看项目的组成结构,如图 8 所示:flex_src 中是默认的 flex 源码位置,flex_libs 则是存放 flex 其他第三方包的默认路径。类似于 web 应用的 lib 文件夹。 src 是 java 代码位置。 WebContent 文件夹的结构和普通由 WTP 建立的 Web Project 的结构完全相同。在默认的输出路径 bin-debug 文件夹中,我们可以看出 Flex builder 自动生成的 FlexSample.mxml 文件已经被自动编译成 FlexSample.swf 文件。


图 8:Flex 项目结构
图 8:Flex 项目结构

接下来,我们在新创建的项目上增加一点内容并让它运行起来:双击 FlexSample.mxml, 在其中添加一个最基本的 Flex 组件 :Label, 并且在该应用初始化的时候调用 init() 方法。我们在 init() 方法中用 trace() 语句输出调试信息。代码如下清单 1 所示:


清单 1:FlexSample.mxml

				
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute"
     initialize="init()">
     <mx:Script>
         <![CDATA[
             private function init():void
             {
                 var i:int = 0;
                 i++;
                 trace("i="+i);
             }
         ]]>
     </mx:Script>
    <mx:Label text="Hello World!" />
</mx:Application>
				

运行、调试以及部署

现在,终于到了让我们的项目运行的时候了 ! 右键点击项目 ->Run As->Run On Server 如图 9 所示:接下来的几个页面选择默认即可,这时大家我们可以看到项目会被部署到我们配置的 Tomcat6 上去。并且 Flex Builder 会自动打开一个我们刚才配置的外部 FireFox 窗口。


图 9:运行项目
图 9:运行项目

但可能令您遗憾的是 Flex Builder 自动打开的 FireFox 窗口打开的 URL: http://localhost:8080/FlexSample/ 却什么也没有。别着急,还剩下最后一步:

如图 10 所示:右键点击我们要运行的 FlexSample.mxml > Run As > Flex Application


图 10:运行 mxml
图 10:运行 mxml

如果不出意外的话,您应该会看到下面的界面,Flash Tracer 插件输出了我们用 trace() 语句输出的 debug 信息,标签的 Hello World !也被显示到了界面上。同样,打开 FireFox 的 HttpFox 插件,我们也可以看到在运行时 FlexSample.swf 被载入。


图 11:运行后的界面
图 11:运行后的界面

如果我们希望像调试 Java 代码那样,在运行时观察变量的值怎么办呢?首先我们像在 Java 代码中设置断点一样给我们的 Action Script 代码增加断点。如图 12 所示:


图 12:在 Action Script 代码中设置断点
图 12:在 Action Script 代码中设置断点

然后选择我们的 FlexSample.mxml 右键选择调试运行。如图 13 所示:


图 13:调试方式运行 flex
图 13:调试方式运行 flex

然后我们随提示切换到 Flex 的调试视图,就会看到我们可以像 Java 调试模式那样轻松的调试 Flex 代码。如图 14 所示:


图 14:Flex Builder 调试视图
图 14:Flex Builder 调试视图

利用 WTP,我们可以将项目 export 成一个标准的 war file. 将导出的 war 文件放到 Tomcat 的 webapps 目录或者其他 web 服务器的相应目录下就可以当作一个标准的 web 应用来部署运行。

到此为止,我们应该庆祝一下我们已经迈入了 Flex 的大门了!我们已经编译出了我们自己的 swf 文件,并且运行在服务器上了。熟悉了这个开发过程之后,让我们乘胜前进,结合一个小例子学习一下 Flex 的编程基础知识吧!





回页首

Flex 编程基础

面向对象的编程

在上面 Hello World 的例子中我们可以看出,就像在 HTML 中嵌入 JavaScript 那样,我们可以在 mxml 里面嵌入 Action Script 代码来实现业务逻辑。没错!如果您把 Flex 中 mxml 和 Action Script 的关系理解为 Html 和 JavaScript 的关系,您会忽然发现您对 Flex 变的如此熟悉!

Action Script 语言是面向对象的脚本语言,它连编写方式都和 JavaScript 非常的相似。除了可以嵌套在 mxml 里面之外,它还可以像 JavaScript 写在单独的 .js 文件里面那样写在单独的 .as 文件里面,然后在 mxml 里面引入它。

下面我们新建一个 Action Script 的类 J2eeServer.as 如清单 2 所示:


清单 2:J2eeServer.as

				
package com.ibm.flex
{
    import flash.events.EventDispatcher;
    import mx.rpc.AsyncToken;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.HTTPService;
    
    public class J2eeServer extends EventDispatcher
    {
        public function J2eeServer()
        {
        }

        public function sendRequest(locale:String):void
        {
            var httpObject:HTTPService = new HTTPService();
            httpObject.resultFormat = "text";
            httpObject.url = 
                "http://localhost:8080/FlexSample/SampleServlet?locale="+locale;
            var responder:mx.rpc.Responder = new mx.rpc.Responder(onSuccess, onFault);
            var call:AsyncToken = httpObject.send();
            call.addResponder(responder);
        }
        private function onSuccess(event:ResultEvent):void
        {
            this.dispatchEvent(event);   
        }
        
		private function onFault(event:FaultEvent):void
        {
            trace("communication failed!");
            this.dispatchEvent(event); 
        } 
    }
}

在这个类定义里面,熟悉 Java 的开发人员可以看出其编码规范和 Java 非常类似。在其中我们定义了一个 sendRequest() 方法, 使用 HTTPService 对象发起一个 http 的 get 请求 , 并且对于不同的返回结果我们定义了 onSuccess() 和 onFault() 两个方法去处理。在这两个结果处理方法中,我们将事件 dispatch 出去。

与 Servlet 集成

在 J2eeServer.as 中,我们通过 Action Script 发出 http 请求,现在我们定义一个服务器端的 servlet 来处理该请求。如清单 3 所示:


清单 3:SampleServlet.java

				
package com.ibm.sample;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public SampleServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String locale = request.getParameter("locale");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("The locale you selected is " + locale);
    }
}

和普通 web 应用一样配置 web.xml, 如清单 4


清单 4:web.xml

				
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>FlexSample</display-name>
    <servlet>
        <display-name>SampleServlet</display-name>
        <servlet-name>SampleServlet</servlet-name>
        <servlet-class>com.ibm.sample.SampleServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SampleServlet</servlet-name>
        <url-pattern>/SampleServlet</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>FlexSample.html</welcome-file>
    </welcome-file-list>
</web-app>				
				

事件驱动与数据绑定

从 J2eeServer.as 中我们依稀可以看出 Flex 事件驱动的影子。的确,Flex 的业务流程大多是靠事件来驱动的。某一个方法结束后,dispatch 出去一个事件。事件的监听者监听到这个事件后就会采取相应的动作来处理事件。如清单 5 所示:我们在 init() 方法中进行了事件绑定,绑定了两个监听方法 successHandler () 和 errorHandler () 到 J2eeServer 上。当 J2eeServer 完成和服务器端 servlet 通信 dispatch 出相应的事件后,两个监听方法便会监听到相应的事件并进行处理。

Flex 的另外一个重要的特点就是支持数据绑定,在另一篇文章《使用 Eclipse 和 JavaFX 开发 Mashup 应用》中我们曾介绍了 JavaFx 的数据绑定特性,同样 Flex 也支持数据绑定。当数据源被绑定到另外一个对象的某属性上时,数据源的数据如果发生变化,开发人员不需要写额外的代码该对象的属性值就可以相应的变化。如清单 5 中所示:如果要进行数据绑定,则要先定义一个可绑定的数据源,例如我们在变量 private var serverResponse:String = "" ;的上面设置 [Bindable] 属性,表示其为可绑定变量。然后我们在 resultLable 中使用花括号 {serverResponse} 将变量serverResponse绑定到 resultLable 的 text 属性上。


清单 5:FlexSample.mxml

				
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     creationComplete="init()">
     <mx:Script>
         <![CDATA[
             import mx.rpc.events.ResultEvent;
             import mx.rpc.events.FaultEvent;
             import com.ibm.flex.J2eeServer;
             import mx.collections.ArrayCollection;
             
            private var jserver:J2eeServer = new J2eeServer();
            //可绑定变量
            [Bindable]
            private var serverResponse:String = "";
            //可绑定变量
            [Bindable]
            private var locales:ArrayCollection = new ArrayCollection(
                                                      [ {label:"en_us", data:"en_us"}, 
                                                         {label:"zh_cn", data:"zh_cn"}]); 
             
             private function init():void
             {
                 //事件绑定
                jserver.addEventListener(ResultEvent.RESULT, successHandler);
                jserver.addEventListener(FaultEvent.FAULT, errorHandler);
             }
             private function localeComboxChangeHandler(event:Event):void
             {
                 jserver.sendRequest(localeCombox.selectedItem.data);
             }
             
             private function successHandler(event:ResultEvent):void
             {
                 serverResponse = event.result.toString();
                 trace(event.result);
             }
             private function errorHandler(event:FaultEvent):void
             {
                 serverResponse = event.message.toString();
                 trace(event.message);
             }
         ]]>
     </mx:Script>
     <mx:VBox>
        <mx:Label text="Select your locale:" />
        <mx:ComboBox 
		    id="localeCombox" 
		    width="160" 
		    dataProvider="{locales}" 
		    change="localeComboxChangeHandler(event)"/>
        <mx:Label 
		    id="resultLabel"
		    text="The response from server is: {serverResponse}" />        
     </mx:VBox>
</mx:Application>

最终项目的文件结构如图 15 所示:


图 15:项目文件结构图
图 15:项目文件结构图

运行项目,我们可以看到当我们改变下拉框的值的时候,会触发 localeComboxChangeHandler() 函数调用 J2eeServer 的 sendRequest() 方法将选择的 locale 值发送给服务器端的 servlet,并且在结果返回后,将从服务器端得到的 response 显示在 resultLable 上。如图 16 所示:


图 16:项目运行结果
图 16:项目运行结果




回页首

结束语

Flex 作为 RIA 的新技术,对传统 web 开发技术有继承也有发展。这篇文作为入门文,主要作用是帮助大家掌握 Flex 的开发环境、开发方式、开发调试部署的流程以及 Flex 的基本编程知识。但 Flex 除了国际化、Unit 测试、Ant 编译等传统问题之外,作为新技术 Flex 还有很多不同以往的地方,比如模块开发,RSL(Runtime Shared Libraries), Shared object、和 JavaScript 交互以及它的 MVC 框架 cairngorm,远程调用和消息传递框架 BlazeDS 等。所有这些问题都是值得我们进行后续讨论的。

致谢

在本文完成之际,特别感谢 IBM 中国软件开发中心 IM 开发团队我的同事们在工作和学习中给我的巨大帮助!


参考资料

学习

  • Flex 3 Developer's Guide”:很好的 Flex 基础知识入门材料。
  • Flex Developer Center”:针对具体开发场景的大量示例代码和文章。
  • Flex Ant Tasks”:介绍了如何结合 Ant 工具来编译 Flex。
  • Flex RSL”:对Flex RSL开发的各方面进行详细介绍的官方文档。
  • 集成 Flex 与 Ajax 应用程序”(developerWorks,2008 年 7 月):阅读完本文后,您将能够利用通过 Flash 资源获得的丰富功能。
  • 使用 Flex SDK 实现一个 Facebook 相册”(developerWorks,2008 年 12 月):在本篇教程中,将在 Adobe Flex 中开发一个 Facebook 应用程序,它可以以幻灯片的形式显示用户的 Facebook 相册。
  • Fluint 的官方站点”:Fluint 是 Flex Unit Test 的框架 Flex Unit 的升级版本。
  • Cairngorm 框架的 Adobe 官方站点”:Cairngorm 是 Flex 开发最著名和最成熟的一个 MVC 框架。
  • BlazeDS 框架的开源站点”:BlazeDS 是 Adobe 的一个开源项目。基于服务器的 Java 远程调用(remoting)和 Web 消息传递(messaging)技术,它能够使得后台的 Java 应用程序和运行在浏览器上的 Flex 应用程序或 AIR 应用程序相互通信。


获得产品和技术

  • 下载 JRE 或 JDK。
  • 下载 Eclipss Ganymede。
  • 下载 Flex Builder Eclipse 插件版。
  • 下载 Tomcat 6。
  • 下载 FireFox 2.0。
  • 下载 BDebug 版本的 FireFox Flash Player 插件。


关于作者

 

刘庆,目前在 IBM 软件开发中心(IBM CSDL)IM 开发团队担任开发工程师,拥有 IBM DB2 DBA 专业认证,他在 J2EE 和 Web 开发领域有着多年开发经验,喜欢关注新技术。他毕业于中国科技大学,并拥有硕士学位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flex 开发入门 的相关文章

  • 在 Firefox 中单击桌面通知时如何将焦点移至选项卡?

    我正在一个网站中实现桌面通知 该网站会在新消息到达时显示通知 我希望当用户单击通知时 打开网站的浏览器选项卡能够获得焦点 我可以使用以下代码在 Chrome 中实现此功能 var n new Notification Title body
  • Eclipse Faces 配置编辑器不工作

    Summary 编辑 faces config xml 时 Eclipse 中的 Faces 配置编辑器不会打开 这是一个 JavaServer Faces 项目 Details 日食3 7 2 Eclipse m2e 1 0 1 m2e
  • 这是 Firefox 中的错误还是 chrome 主动修复了我做错的事情?

    当麦克风的信号超过设定的阈值时 下面的代码只是将一个框变成红色 它在 Linux 上的 chromium 和 Windows 上的 chrome 上快乐地运行一整天 它在两个平台上的 Firefox 上也运行良好 大约 15 秒 当它在 F
  • 我的项目中是否会自动创建 gitignore 文件?

    我一直在尝试使用 EGit 管理我正在处理的项目的本地副本 一旦其他人推我 我就会拉 但是 有文件显示我在本地存储库中有未提交的更改 但我没有进行任何更改 我尝试通过手动识别这些更改来解决这些问题 并发现它们来自 gitignore 文件
  • 在PC上的Firefox上模拟Android的Webview?

    作为我的软件开发工作 针对 Android 的一部分 我需要在通过 Android 的 WebView 查看时检查大量 HTML 页面的内容 到目前为止 我已经能够通过将 HTML 内容转储到文件中来实现这一点 data data
  • 在Eclipse中添加注释掉代码的快捷按钮

    只是想知道是否有一种方法可以在 Eclipse 编辑器中添加一个按钮 就像在 Visual Studio 中一样 在 Java 视图 中快速注释或取消注释选定的代码块 Using the keyboard shortcut isn t ea
  • maven-compiler-plugin 无法编译 Eclipse 没有问题的文件[重复]

    这个问题在这里已经有答案了 Eclipse 编译以下代码没有任何问题 而当mvn尝试编译此代码 结果编译失败 try Distribution rep get id returns a java util Optional Distribu
  • 使用 Eclipse 的 Android“Hello World”教程

    我尝试编写我的第一个应用程序 Hello World 我已经遇到了一个无法修复的错误 当我运行该程序时 我得到 无效的命令行参数 文件 提示 使用 foo 启动名为 foo 的虚拟设备 请使用 help 获取更多信息 有谁知道这意味着什么以
  • Mercurial Eclipse 插件

    在哪里可以找到好的 Eclipse Mercurial 插件 MercurialEclipse https bitbucket org mercurialeclipse main 更新站点 https bitbucket org mercu
  • 在编辑器中匹配关键字突出显示颜色

    我在 eclipse 中使用 wombat Vim 配色方案的克隆进行 Python 开发 除了匹配的关键字突出显示 无论名称如何 即 ffff96 之外 它也能很好地工作 这种淡黄色使得无法阅读白色的前景文本 有谁知道这是在哪里设置的吗
  • 发送短信之前显示确认对话框

    我是 Android 新手 我已经完全绑定了我的应用程序 但我希望现在对其进行更改 当有人发送短信时 我想显示一个发送短信的确认对话框 询问是否发送 我必须为此创建一个公共类 我已经编写了源代码 它工作正常 但如果用户不单击 是 或 取消
  • Eclipse、Subclipse 1.8.2、SVN 1.7.0 每次操作都要求输入密码

    我安装新的后日食靛蓝 它会要求我输入密码SVN存储库透视图 例如 浏览每个文件夹并再次询问密码 正常使用SVNKit 它要求输入密码每次会话一次 SVNKit 不支持SVN 1 7 0 yet 我该如何解决这个问题 或者这是 JavaHL
  • Selenium 3.7 和 Firefox ESR 52.4.1 是否需要 geckodriver?

    我的理解是 当使用Selenium WebDriver来自 NuGet 的 v3 7 我需要当前版本的 geckodriver 才能与 Firefox ESR v52 4 1 交互 但是 我已经成功运行测试并成功通过withoutgecko
  • 如何以编程方式使用 TestNG 运行 Selenium Java 测试?

    我使用 Selenium RC 和 Java 使用 TestNG 作为测试框架 我使用 Eclipse 作为 IDE 我想非常轻松地从我自己的程序中调用 TestNG 我怎样才能做到这一点 我的以下 Java 代码运行良好 Test pub
  • 本地分析需要 Sonar 3.6 版本

    遇到 执行本地分析需要声纳版本 3 6 消息 当尝试在 eclipse 中使用声纳本地分析时 我刚刚安装了最新的CodeHaus http docs codehaus org display SONAR Installing SonarQu
  • 如何在 Firefox 中缩放 SVG 背景图像而不考虑宽高比?

    我有一个CSSbackground image设置在具有流体高度和宽度的元素上 它是一个 SVG 预期的行为是让它向任何必要的方向拉伸以覆盖整个元素的区域 在 Chrome Safari 甚至是糟糕的 Internet Explorer 9
  • 贾瓦尔 (JNI) 不可用

    Windows 7 64 位 Eclipse Indigo SlickSVN 1 6 17 均已安装 并带有在 Windows 中输入的库的路径 为什么我收到消息 JAVAHL JNI Not available 以及为什么 Eclipse
  • 在 Eclipse Kepler 中安装远程系统资源管理器

    我正在使用 Eclipse Kepler 并且尝试使用存储库安装远程系统资源管理器 当我在开普勒搜索它时 http download eclipse org releases kepler http download eclipse org
  • 使用 Eclipse 将 YouTube 视频嵌入到 Android 应用程序中?

    我正在尝试找出如何使用 eclipse 将 youtube 视频嵌入到 android 中 我更喜欢使用 chromeless 播放器 但目前没有必要 任何有关如何执行此操作的帮助将不胜感激 嵌入 Youtube 视频的最简单方法是使用意图
  • 为什么网络浏览器在通过 Enter 键激活时不应用 CSS :active 状态?

    大多数 Web 浏览器都提供键盘快捷键来与 DOM 交互 e g Tab将焦点转移到下一个可聚焦元素 Alt Tab将焦点转移到前一个可聚焦元素 Enter激活当前聚焦的元素 我现在发现许多流行的浏览器 Firefox Chrome Saf

随机推荐

  • Centos7安装Gitlab

    安装GithLab 1 安装必要依赖 sudo yum install y curl policycoreutils python openssh server perl sudo systemctl enable sshd sudo sy
  • Sublime text 3 如何格式化HTML/css/js代码

    使用Sublime text 3 编写代码是一种享受 使用Sublime text 3 格式化HTML代码 需要安装插件 具体安装步骤如下 1 打开菜单 gt 首选项 gt 插件控制 输入 install package 2 等待程序进入插
  • DoS攻击

    原文 1 DoS攻击 DoS攻击 Denial of Service 拒绝服务攻击 通过消耗计算机的某种资源 例如计算资源 网络连接等 造成资源耗尽 导致服务端无法为合法用户提供服务或只能提供降级服务 在SDN网络的集中式架构中 控制器是天
  • 医学图像分割评判标准及程序代码

    文章目录 1 图像分割指标 2 两个问题 3 IOU和假阳性率 4 准确率 Accuracy 精确率 Precision 召回率 Recall 和F1 Measure 参考资源 1 https blog csdn net zichen zi
  • 关于获取项目在tomcat中的路径问题

    1 直接发请求 可以用下面的方式 ServletContext context ServletRequestAttributes RequestContextHolder getRequestAttributes getRequest ge
  • 如何安装管式土壤墒情监测仪?

    安装说明 在安装时 需选择地势相对较高且平坦的位置进行安装 这样即能防止雨水倒灌进设备内部从而引起设备短路或线路故障 还能保证监测数据的精准度 首先 我们先使用土钻竖直于地面进行打孔保证传感器放入 取出都比较顺畅 直到孔深与传感器所标识的安
  • 程序员如何培养领导力

    第一阶段 熟悉自己的业务 知道问题在哪里 怎样可以解决 领导者是给大家指方向的 你必须先知道要走哪个方向 才能带领别人 这是领导力的基础 第二阶段 培养说服能力 能说服他人 问题可以按照你说的方式解决 领导力的表现是 他人愿意服从你 这不能
  • 比较流行的编程语言

    流行的编程语言 1 C C语言诞生于1972年 可以称之为现代高级语言的鼻祖 由著名的贝尔实验室发明 C语言是人们追求结构化 模块化 高效率的 语言之花 在底层编程 比如嵌入式 病毒开发等应用 可以替代汇编语言来开发系统程序 在高层应用 也
  • MOS管应用之外接电源和电池供电的的双电源自动切换电路

    现在大部分电子产品都配有锂电池 在没有外接电源的时候 使用锂电池进行供电 当外接电源的时候 使用外部电源供电 同时对锂电池充电 因此要求电路必须具备能够根据是否接有外部电源 而自动选择相应供电电源的能力 常见的简单电源切换电路如图1所示 但
  • 16.echarts X轴像直尺一样设置刻度

    在做老师的项目的时候 老师让我们实现X轴的直尺刻度显示 网上查了查相关代码 大家都没有明确介绍 因此我在这里记录一下 自己的学习 先看实现效果 对echarts的xAxis yAxis这两个属性进行修改即可实现 xAxis 第一个 是原X轴
  • nodeMCU(ESP8266)和RC522的接线图

    文章目录 nodeMCU ESP8266 和RC522的接线图 参考文章 nodeMCU引脚图 nodeMCU 和 RC522接线图 示例代码 nodeMCU ESP8266 和RC522的接线图 参考文章 这篇应该是别人从国外论坛翻译过来
  • 腾讯翻译软件推荐

    相信大家学编程的时候 经常会需要进行官方文档的查阅 但是大部分的官方文档都是英文的 对于英文不是很好的朋友不是很友好 当然 如果英文较好的朋友最好尝试看英文 毕竟在写代码的时候翻译软件会把代码中的英文也翻译出来 下面我推荐一款腾讯翻译软件给
  • Web前端——HTML中的列表、表格、表单

    一 列表
  • 数据挖掘与数据分析的主要区别

    本文来自网易云社区 百科是这样定义数据挖掘和数据分析的 数据分析 是指用适当的统计分析方法对收集来的大量数据进行分析 提取有用信息和形成结论而对数据加以详细研究和概括总结的过程 这一过程也是质量管理体系的支持过程 在实用中 数据分析可帮助人
  • Java集合框架之Set集合简介

    和List集合一样 Set集合也是属于单列集合 同属于Collcetion集合体系下 List和Set都是单列集合 但是他们是存在区别的 List 有序 元素可重复的单列集合 Set 无序 元素不可重复的单列集合 Set和List集合一样属
  • idea移除许可证

    目录 一 介绍 二 操作步骤 一 介绍 当自己的idea日期要到了 又想续上 但是覆盖不了之前的日期 新的没办法生效 那么就要把原先的许可证先移除 再重新续上新的 二 操作步骤 1 点击idea的右上角的这个展开 2 选择帮助 点击注册 3
  • 算法➡数学问题

    文章目录 进制转换 最大公约数与最小公倍数 最大公约数 素数 判断素数 素数表的获取 质因子分解 大数运算 大数乘法 几何问题 由三点的坐标求所构成的三角形的面积 判断点是否在三角形内 集合问题 子集问题 数学归纳法 回溯法 全排列 进制转
  • 面试经典(5)--二叉树最低公共祖先LCA

    题目 输入二叉树的俩个节点 求它们的最低公共祖先 算法分析 我们直接来分析O n 的算法 比如求节点F和节点H的最低公共祖先 先求出从根节点A到F的路径 再求出A到H的路径 那么最后一个相同的节点就是最低公共祖先 A gt B gt D g
  • 算法——有向图的最短路径算法

    建议学习最短路径算法时 观看这个视频 https www bilibili com video BV1q4411M7r9 from search seid 9662298119837732890 Dijkstra算法 思路 1 从一个单源节
  • Flex 开发入门

    级别 初级 刘 庆 qlcdl cn ibm com 软件工程师 IBM 软件开发中心 2009 年 1 月 07 日 本文介绍 Flex 开发的基础知识 包括如何搭建开发环境 如何调试 以及如何建立和部署简单的