如何在PHPUnit_Extensions_SeleniumTestCase中访问存储的值

4
如何在Selenium-RC(通过PHPUnit)中存储一个值,并在以后使用PHPUnit检索/访问它?
假设我在测试中运行以下命令:
$this->storeExpression( "foo", "bar" );

如果我正确理解了Selenium API文档,我可以使用javascript{storedVars['foo']}来访问这些数据,使用传统的Selenese。它应该包含值"bar"
我的问题是:如何在PHPUnit中访问javascript{storedVars['test']}表达式(或更一般地说,javascript{storedVars})?
例如,这是一个我运行过的简单测试:
public function testStorage()
{
    $this->open('http://www.google.com/'); // for example
    $this->storeExpression( 'foo', 'bar' );
    $foo = $this->getExpression('foo');
    echo $foo;
}

这段代码的输出结果是"foo"(除了其他标准的PHPUnit输出),而我期望它应该是"bar"。它只是返回了表达式的名称,而不是它的值。

有经验的人能否给我一些指导?

3个回答

2

这个帖子里有很好的回答,但目前看来还没有100%的有效答案。

根据 Selenium 的参考文献:

http://release.seleniumhq.org/selenium-core/1.0/reference.html#storedVars

正确的代码语法似乎应该是:

$this->storeExpression( 'bar', 'foo' );
$foo = $this->getExpression("\${foo}");

我还没有进行过准确的测试,但是可以采用类似的方法来实现。
$this->storeHtmlSource('srcTxt');
$val = $this->getExpression('\${srcTxt}');
print $val;

对我来说起了作用。


这正好按照我的预期运行。很抱歉你没有更早地回答,我几周前在这上面设置了50美元的赏金! - Ryan

1

PHPUnit Selenium Testcase 驱动程序实际上理解 storeExpressiongetExpression;请查看其源代码。您可以执行以下操作:

$this->storeExpression('foo', 'bar');

并且

$this->getExpression('foo');

也许是我做错了什么。这段代码有点太长了,不适合在评论中放,因此我更新了我的问题。 - Ryan
这只是不起作用。$foo = $this->getExpression('foo'); 只是将 $foo 设置为 "foo"。我还需要做些什么吗? - Ryan

0

由于Selenium将表达式结果存储在第二个参数中,因此它将值存储在“bar”中,当您需要调用它时,应调用存储的名称以获取表达式。

    $this->storeExpression( 'foo', 'bar' );
    $foo = $this->getExpression("bar");

希望这能对你有所帮助,它对我有效。

编辑:

    $evaluated = $this->getEval("regex:3+3");
    $expressed = $this->getExpression("regex:3+3");

第一个被评估的将给出表达式的评估输出,而第二个将显示表达式的输出。 第二个用于验证警告是否生成了指定的表达式。


当我运行这段代码时,$foo = $this->getExpression('bar'); 只是将 $foo 设置为 "bar"。实际上,$foo = $this->getExpression( "this is a test" );$foo 设置为 "this is a test"。我无法弄清楚我做错了什么。这段代码片段对你来说是否有效? - Ryan
根据您的要求,表达式已经被评估并更新了答案。请查看是否有帮助。 - lAH2iV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接