gpt4 book ai didi

php - 我可以使用 Mink 和 Selenium2 发送原始键盘输入吗?

转载 作者:可可西里 更新时间:2023-10-31 23:08:44 26 4
gpt4 key购买 nike

我将 Behat 和 Mink 与 Selenium2 驱动程序一起使用,我试图直接在表单字段中键入内容(模拟原始键盘输入),而不是使用 fillField()功能。

这就是我正在尝试的:

$element = $this->getSession()->getPage()->find('css', '#questionName');
$element->focus();

$element->keyPress('a');

// also tried this, with no success
// $element->keyDown('a');
// $element->keyUp('a');

有一个<input type="text" id="questionName">页面上的元素。它正确接收焦点,但不响应任何模拟键盘输入。

是否可以像这样模拟原始键盘输入?
我做错了什么?

最佳答案

似乎有很多帖子提示 keyPress 没有按预期工作,而且一些驱动程序根本不支持它。例如:

Goutte - Behat\Mink\Driver\GoutteDriver 不支持键盘操作

Selenium 驱动程序特别使用自定义 js 库来运行它的命令,但它似乎不起作用。我试过同时使用 $this->getSession()->getDriver()->keyPress()$element->getPress() 但没有成功。

https://github.com/Behat/MinkSelenium2Driver/blob/master/src/Behat/Mink/Driver/Selenium2Driver.php#L815

https://github.com/Behat/MinkSelenium2Driver/blob/master/src/Behat/Mink/Driver/Selenium2/syn.js

有趣的是,Selenium2 代码库中还没有针对 keyPress 事件的单元测试(所以我假设它目前正在开发中)。

因此,目前,一个合适的解决方案是使用来自 Is it possible to simulate key press events programmatically? 的关键事件的 javascript 模拟(如果您不使用 jQuery,请参阅此替代方案)和 Behat Mink 的 evaluateScript 函数。

如果您直接使用 PHPUnit 进行测试:

$key = 'a';
$script = "jQuery.event.trigger({ type : 'keypress', which : '" . $key . "' });";
$this->getSession()->evaluateScript($script);

或者,如果您使用的是 Cucumber,请将其添加到您的 FeatureContext.php 文件中,您可以添加此函数:

/**
* @Given /^(?:|I ) manually press "([^"]*)"$/
*/
public function manuallyPress($key)
{
$script = "jQuery.event.trigger({ type : 'keypress', which : '" . $key . "' });";
$this->getSession()->evaluateScript($script);
}

然后像这样在你的特征文件中使用它:

Given I manually press "a"

至于使用 javascript 作为解决方案,一些驱动程序使用 javascript 来执行所需的 keyPress。例如:

https://github.com/Behat/MinkZombieDriver/blob/master/src/Behat/Mink/Driver/ZombieDriver.php#L819

关于php - 我可以使用 Mink 和 Selenium2 发送原始键盘输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com