论坛首页 综合技术论坛

用自然语言的语法分析Selenium脚本

浏览 13022 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-01-05  
下面是一段从selenium rc 的官方网站的文档中摘抄出来的代码:

import com.thoughtworks.selenium.*;
import junit.framework.*;
public class GoogleTest extends TestCase {
    private Selenium sel;
    public void setUp() {
        sel = new DefaultSelenium("localhost",
            4444, "*firefox", "http://www.google.com");
        sel.start();
    }
    
    public void testGoogle() {
        sel.open("http://www.google.com/webhp");
        sel.type("q", "hello world");
        sel.click("btnG");
        sel.waitForPageToLoad("5000");
        assertEquals("hello world - Google Search", sel.getTitle());
    }
    
    public void tearDown() {
        sel.stop();
    }
}


如果换成自然语言该怎么说?我想用中文应该是这样的:

打开位于http://www.google.com/webhp的网页
在q文本框中输入hello world
点击btnG按钮
等待页面载入5分钟
检查页面标题是不是hello world - Google Search


那么这些句子的语法是怎么样的呢?

【谓语】打开【定语】位于http://www.google.com/webhp的【宾语】网页
【状语】在q文本框中【谓语】输入【宾语】hello world
【谓语】点击【定语】btnG【宾语】按钮
【谓语】等待【宾语】页面载入【补语】5分钟(对于此句,我不确认,请语文好的人士来指教)
【谓语】检查【宾语】页面标题是不是hello world - Google Search(句子做宾语?同样求指教)


虽然我的语文老师看到这样的分析估计要气得吐血的。但是,没关系。我们还是能够看出一些规律。

首先没有主语。那么主语是什么?暗含的都是这段程序的执行者,其实就是“计算机”,或者说“CPU”。所以,程序代码在自然语言语法分析之后都是缺少主语的。那么在英语和中文这样的主谓宾句式的语言中,顶在最前面的就是谓语,除了偶尔会因为中文习惯把状语放在前面做修饰。

其次,这些句子都是祈使句。句子一般分为陈述句,疑问句,祈使句,感叹句。这些句子句式相同是由于这些句子最终都是翻译为计算机指令有关。而计算机指令都是一些对CPU动作的命令。既然是操纵CPU的文本,自然都是祈使句了。所以说,从句式角度来讲,程序代码是非常单纯的。

再次,这些句子都是简单句。缺乏很复杂的从句结构。这和selenium缺少循环和分支不无关系。但是即便是在java代码中。我们仍然可以把复杂的句子厘清为简单句的。正如你可以把话说得像绕口令一样,从句套从句,定语套定语。也可以像侯宝林说相声一样。短句接短句。

最后,我们可以发现变量都是出现在定状补的位置上。这就说明句子的骨架是稳定的。只有修饰性成分才是经常变动的。有的时候,写代码的时候调用一个方法,真的有小时候造句的感觉。老师说用“如果……那么……”造句,于是我写下了“if……then……”。

呵呵,不知道是不是大家认同我的观点。
   发表时间:2007-01-05  
以前DSL我胡思乱想了一下,大概想了这么多东西:

目标:
1)  面对不会程序语言的用户

2) 用户用很容易理解的语言描述要做的事情


为了避免思维过于活跃,先把DSL用于验收测试的case设想一下,要做到这点,
有几点需要明确:

1) 良好定义的句子规范 ,词组规范,定义词组Token

2) 支持简单模块的封装(类似method的组织)

框架的作用:

DSL---> 可运行的底层程序语言

不知道 TW是否正在考虑作 关于验收WEB测试的DSL? 底层框架是 WATIR 或者Selenium .

如果考虑做的话,我是否可以加入?
先把目标定位在实现 针对WATIR 和 Selenium的 DSL框架也行啊。



0 请登录后投票
   发表时间:2007-01-05  
呵呵,我没有代表任何官方意见啊。我也没有明确的说要做DSL嘛……
公司内部是有与测试有关的动向。但是不是DSL,具体再做啥,没人说得清楚。还在收集意见和建议。不过开发是闭源的,应该没法参加。
给selenium套一层自然语言的外套。徐x已经做过啦。不过我不是很喜欢传统做语法解析的思路。更喜欢以交互式编辑(强大的IDE)来代替语法解析。
验收测试是目前比较公认的一个比较可行的滩头领域。我写这篇文章就是让大家认识到,selenium脚本,虽然也是程序的一种,但是语法结构极其简单。这就是本文的全部意义。
0 请登录后投票
   发表时间:2007-01-09  
我最喜欢的是 selenium ide的自动录制功能。
0 请登录后投票
   发表时间:2007-02-13  
我点击一般的连接,比如:
user.click("link=个人信息");

怎么死活提示:

com.thoughtworks.selenium.SeleniumException: ERROR: Element link=个人信息 not found

这个连接页面上也确实存在

有人遇到过么?
0 请登录后投票
   发表时间:2007-03-02  
selenium ide的自动录制功能 没有IE版的 头痛呀
0 请登录后投票
   发表时间:2007-03-14  
徐X那个封装不是部分弥补了直接用sel的不足?加上点语法糖用起来感觉有点像DSL了。
可惜Selenium IDE录制的东西没有语法糖。
0 请登录后投票
   发表时间:2007-03-18  
taowen 你可以买本 linguistics 的书看看关于语言的研究。
不要让计算机直接去分析自然语言(有其是中文这种表意极其不明确的语言),这个基本没戏。我觉得徐x的基于语法解析的办法已经是目前最好的形式了。
0 请登录后投票
   发表时间:2007-03-19  
我没有打算拿计算机去分析自然语言啊。我和徐x都认为只要把程序写得“像”自然语言就可以了。也就是
自然语言 -> 编程语言(很困难)
编程语言 -> 自然语言(阅读起来像,很容易)
所以这个比较的目的也就是为将来把代码写得更像自然语言找出一些方向。
0 请登录后投票
   发表时间:2007-03-20  
有关DSL的我的想法是:
1.DSL不必是自然语言,只要像就可以(重复了一遍taowen的话)
2.我们可以对DSL做一些限制,以便消除自然语言二义性。就像SQL一样。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics