在AngularJS/ Rails
环境中为富文本输入框使用TextAngular。
使用Capybara/Selenium & Capybara-Webkit
运行集成测试。尝试创建一个集成测试,将文本输入到测试的文本区域。然而,我没能成功地做到这一点。
阻止我的是,每当加载测试或页面时,文本输入框id都会发生更改。所以我使用了下面的类,它用于文本角度测试。带有:
find('textarea.ta-html.ta-editor')
我使用了它,因为我知道它是有效的,为文本angular编写的javascript测试也使用了它。文本角度github测试
然而,当我尝试用文本值设置文本区域时:
find('textarea.ta-html.ta-editor').set("Upgraded to SSD")
我得到:
失败/错误:find('textarea.ta html.ta editor').set("已升级到SSD")
Selenium::WebDriver::Error::ElementNotVisibleError:元素当前不可见,因此可能无法与交互
如何使用Capybara
设置文本区域的值?
与textarea.ta-html.ta-editor
匹配的元素隐藏在页面上,不是用户交互的元素。根据设计,Capybara通常要求您与用户将要交互的元素交互,因此您需要在可见元素上调用#set
,该元素是您尝试交互的元素的前一个同级元素,并且与div[contenteditable]
匹配。你不显示你的HTML,但希望你有一个包含元素,你可以进行
find('<container_selector> div[contenteditable]').set(...)
或
find('<more_general_container_selector>', text: '<label text or something else in the container>').find('div[contenteditable]').set(....)
如果你在页面上只有一个这种类型的字段,你可能会逃脱
find('.text-angular div[contenteditable]').set('Upgraded to SSD')
注意:如果使用selenium驱动程序,它有一个限制,即它只能与主要的contenteditable元素交互,而不能与在其中创建的子元素交互。我不确定其他水豚驱动程序是否也有同样的问题。