Selenium webdriver BDD-问题在没有UI的情况下运行

Selenium webdriver BDD-问题在没有UI的情况下运行,selenium-webdriver,rspec,cucumber,poltergeist,Selenium Webdriver,Rspec,Cucumber,Poltergeist,我不熟悉使用cucumber和ruby进行BDD单元测试,并且希望获得一些关于在没有UI的情况下运行测试时出现的错误的帮助 如果我有任何条款或阶段不正确,请让我知道 场景:页面上有一个下拉列表,一旦您开始键入,该列表将收回数据。在测试中,我输入一个值,它搜索数据,一旦返回,我单击所选值。这是通过以下代码完成的 选择client.在“client”中填入:client\u name 页面上没有css(“.选择加载区域”) 选择client.find('[name=client]')。发送密钥(:e

我不熟悉使用cucumber和ruby进行BDD单元测试,并且希望获得一些关于在没有UI的情况下运行测试时出现的错误的帮助

如果我有任何条款或阶段不正确,请让我知道

场景:页面上有一个下拉列表,一旦您开始键入,该列表将收回数据。在测试中,我输入一个值,它搜索数据,一旦返回,我单击所选值。这是通过以下代码完成的

选择client.在“client”中填入:client\u name
页面上没有css(“.选择加载区域”)
选择client.find('[name=client]')。发送密钥(:enter)

selectClient是一个变量,用于查找dropdownlist所在的部分,这样我就不会搜索整个页面来查找控件

当它为UI运行时,它可以正常工作,但是当它在没有UI的情况下运行时,当单击或选择所选项目时,我会收到以下错误

水豚::恶灵::鼠标事件失败:在坐标[122261.5]处点击失败。Poltergeist使用CSS选择器“html.no-js body.ng-scope.rebranding div.wrapper.ng-scope div.inner.ng-scope div.container-fluid div.ng-scope div#module-container.ng-scope div.myob section.ledger-upgrade div.row div.col-xs-24 div div.form-group div.Select.create-business.Select---single.is-search-search div.Select---search-search-controlspan#react-select-2--value.select-multi-value-wrapper div.select-placeholder'位于此位置。它可能与您尝试与之交互的元素重叠。如果您不关心重叠的元素,请尝试使用node.trigger('click')

我尝试了以下建议的更改

selectClient.find('[name=client]')。trigger('click')

这似乎不适用于UI和无UI。 通过UI,我得到以下错误消息

Capybara::NotSupportedByDriverError:Capybara::Driver::Node#触发器

如果没有UI,则不会触发或选择单击

我尝试了以下选项,但仍然没有运气,因为所选内容没有单击或没有用户界面

selectClient.find('[name=client]',:visible=>false).trigger('click')
selectClient.find('[name=client]',:visible=>false).trigger(':enter')
selectClient.find('[name=client]',:visible=>false).trigger(':return')
selectClient.find('[name=client]',:visible=>false)。发送密钥:输入
selectClient.find('[name=client]',:visible=>false)。native.send\u键:return

我也尝试过在下面的代码片段中使用Javascript,但在没有UI时似乎没有单击或选择

page.execute_脚本('var keyEvent=document.createEventObject?document.createEventObject():document.createEvent(“事件”);
if(keyEvent.initEvent){keyEvent.initEvent(“keydown”,true,true);}
keyEvent.keyCode=13;
keyEvent.which=13;
document.dispatchEvent?document.dispatchEvent(keyEvent):document.firevent(“onkeydown”,keyEvent);
document.getElementsByName(“客户端”)[0]。dispatchEvent(keyEvent);”)

我使用的是poltergeist(1.12)、capybara(2.6.2)、selenuim webdriver(2.50)、cucumber(>2.0)

请让我知道,如果有任何更多的细节需要


谢谢。

首先,您的水豚和selenium网络驱动程序已经过时了。其次,我假设当你说“使用UI”时,你指的是使用Selenium,而不是使用Poltergeist。selenium驱动程序不支持
#trigger
,因为使用它是非常不受欢迎的。这是因为
#trigger
可以让你做一些用户不能做的事情,并且在可能的情况下应该避免。您需要弄清楚为什么一个元素与您试图单击的元素重叠,并解决这个问题(最大页面变大,等等)。如果您需要帮助,请添加实际的HTML。您还想使用
page.assert\u no\u选择器(:css,'.Select loading zone')
因为没有css?只返回一个布尔值,不会在未满足条件时向您发出警告(当您想根据是否存在某个条件来决定下一步要做什么时,可以使用该函数)。html元素上的no-js类也有点令人担忧,比如在Poltergeist驱动程序注册中,有一个js错误阻止了整个页面加载(enable js_errors:true)以查看它们被记录。@ThomasWalpole,“With UI”表示使用Selenium,而不是使用Poltergeists时。感谢您提供有关使用
assert\u no\u选择器的提示。再仔细研究一下,我发现了另一个错误。使用poltergeist,
fill_in
语法不起作用,但使用selenium可以起作用。我试过
element.set([value])
,但在《恶鬼》中也遇到了同样的问题。您会推荐正确的值填充方法,以便它在Poltergeist和Selenium中都能工作吗?如果它与Selenium一起工作,但不与Poltergeist一起工作,那么很可能您使用的是Poltergeist不支持的JS功能(它不支持ES2015功能,如
let
等),如果您使用其中任何一种,如果不传输到ES5,那么Poltergeist将无法完全加载页面,并且使用
fill_in
也不会对您有所帮助。因此,HTML中显示的“no js”类与我有关——它往往表示页面从未完全加载。如果您确定这不是问题所在,那么您需要发布您试图填写的HTML以及您想要填写的确切错误消息get@ThomasWalpole,我知道它不会抛出错误,因为我在设置填充之前捕获了innerHTML。请参见下面的
选择…