1)有没有办法将Tab键发送到浏览器来测试页面的选项卡索引?
2)有没有办法将W键发送到浏览器,同时还模拟按住cmd键以关闭chrome中的标签?
我们尝试过使用keyPress()函数,并且还在jQuery中使用了以下函数:
{{1}}
它们都不会按预期运行(它们似乎根本不起作用)。
有没有人能解决这个问题?
答案 0 :(得分:0)
我在这个问题上花了很多时间,这是我的结果:
Behat没有预先定义的步骤来将密钥发送到页面上的任何元素。它确实有pressKey
方法(@Given I press the :char key in the :field field
),但它只适用于字段作为键事件的目标。 您必须编写自己的pressKey
以将密钥发送到自定义CSS元素
Behat使用Selenium,而Selenium又使用JS Syn
库来模拟合成浏览器事件。这个库由Selenium注入页面。
Selenium使用Syn.trigger('keydown',...)
向元素发送字符,但它似乎没有按预期工作。相反,使用Syn.key(DOMElement, 'tab')
实际上会将tab
密钥发送到DOMElement
元素。 您也必须实施此功能,以使pressKey
按预期工作。
Behat是使用Symfony组件编写的,并使用DriverFactory
类来创建驱动程序,包括selenium驱动程序。出于某种原因,Selenium2Driver
类是硬编码的,因此无法注入自己的此类扩展实现。 您必须使用反射来退出Selenium2Driver
类的受保护方法以包含Syn
库并执行上一步中的JS代码。
在没有关注目标元素的窗口中触发了Tab键的特殊情况 - 当您想要测试类似Skip to content
辅助功能链接的情况时就是这种情况。此类链接应出现在第一个Tab
字符按下,但Syn
只能从另一个可以获得焦点的元素中进行选项卡。
一个有效的解决方案是在打开<body>
标签后将这样的元素作为第一个元素注入。此元素将在视觉上隐藏,但与屏幕阅读器兼容。然后我们触发这个元素的键,以确保一个应该从tab索引得到第一个焦点的元素实际上得到它。请注意,注入元素和按下触发键不会使其自身聚焦。
好消息是,这一切都是可行的并且正在为我工作。坏消息是,不幸的是,我不能分享代码(好吧,至少不是这个版本而不仅仅是):(