【问题标题】:How to handle capybara cucumber dynamic content如何处理水豚黄瓜动态内容
【发布时间】:2019-01-23 09:43:03
【问题描述】:

我有这个 HTML/JS 代码:

<script>
  function sync()
  {
    var n1 = document.getElementById('textArea');
    var n2 = document.getElementById('textArea2');
    n2.value = n1.value;
  }
</script>


<h1>TESTING PAGE</h1>

<div>
  Edit text:
  </br>
  <textarea id="textArea" rows="4" cols="50" >Input text to copy...</textarea>
  </br>
  <button id="copyButton" type="button" onclick="sync()">Copy Text</button>
  </br>
  </br>
  <textarea id="textArea2" rows="4" cols="50">  </textarea>
  </br>
  <a href="testPage2.html">Link to next page</a>
</div>

如您所见,我只是在按下按钮时将文本框中的内容复制到另一个文本框中。我使用 Javascript 来做到这一点。

当我尝试从两个文本框中获取文本以进行比较时,“.text”方法只为我提供页面加载时框的文本,而不是我之后添加的文本。

更改元素后如何访问这些元素,以便我可以获取当前的文本内容?

谢谢!

【问题讨论】:

  • 您是如何尝试从 textboes 中获取文本的?请分享你的代码。

标签: javascript ruby selenium cucumber capybara


【解决方案1】:

text 方法获取指定元素的后代文本节点内容。 这不是您想要的表单字段,而是您想要的 value

find('#textArea2').value

话虽如此,您真的不应该只获取值并与 ==/eq 进行比较,因为如果您的 JS 很慢,它可能会导致测试不稳定。长期使用 Capybara 提供的匹配器/断言,你会更好

val = find('#textArea').value
click_button('Copy Text')
expect(page).to have_field('textArea2', with: val) # RSpec    
# assert_field('textArea2', with: val) # minitest

【讨论】:

  • 非常感谢!我仍在学习如何使用 Capybara,因此非常感谢您的意见!
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多