如何使用phpUnit / selenium模拟特定位置的单击?

时间:2012-11-14 04:07:21

标签: selenium phpunit

我正在使用phpunit 3.7和selenium进行测试。为了测试文本突出显示功能,我想点击div中的特定x,y位置(包含文本)。

我尝试了moveTo()函数(see),但我总是遇到错误,尽管该元素是PHPUnit_Extensions_Selenium2TestCase_Element类的一个实例:“PHPUnit_Extensions_Selenium2TestCase_Exception:仅支持移动元素。请传递PHPUnit_Extensions_Selenium2TestCase_Element实例“。

$div = $this->byCssSelector('#texthighlight-instant_feedback div div');

if ($div instanceof PHPUnit_Extensions_Selenium2TestCase_Element) {
     $this->moveto(array(
        'element' => $div,
        'xoffset' => 100,
        'yofsset' => 5
     ));
     $this->click();
} else {
    throw new PHPUnit_Extensions_Selenium2TestCase_Exception('no instanceof PHPUnit_Extensions_Selenium2TestCase_Element');
}

此外,“click”命令似乎不存在或不受支持。 我刚开始使用phpunit / selenium并希望其他人现在可以如何模拟元素中特定位置的点击?谢谢!

1 个答案:

答案 0 :(得分:0)

当您在SessionCommand \ MoveTo.php中检查源代码时,您似乎不应该这样做

$this->moveto(array(
    'element' => $div,
    'xoffset' => 100,
    'yofsset' => 5
 ));

但相反:

$this->moveto($div);

然而,我得到了BadMethodCallException:无论我试过哪种方式调用它,命令'moveTo'都不存在或不受支持。

原因我想移动光标:所以我可以右键单击一个元素......

修改

仔细查看我看到的代码,我正在调用moveTo,而不是移动....至少我摆脱了我的异常。顺便说一句:我的建议应该仍然适用于您的问题。

您对click()有什么问题?有两种不同的click()方法,一种在会话上($ this-> click()),另一种在元素上($ div-> click)。

<强> EDIT2:

click()似乎没有被初始化为会话上的可用命令。定义了按钮和按钮。使用第一个按钮然后按钮应该会给你点击。

虽然我还是运气不好。 buttondown和buttonup似乎没有将关联数组作为JSON参数传递给Selenium服务器,因此我无法模拟鼠标中键或鼠标右键。

现在我在Session.php中添加了click as genericpost选项,因为我可以调用:

$this->click('button'=>2);

右键单击我刚将光标移过的元素。