From 562522acf10c36541f2898ef81d2fb87354e5733 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Fri, 2 Jun 2017 11:35:08 -0700 Subject: [PATCH] Work around form fields overriding form element methods - Issue #1010 --- spec/integration/session_spec.rb | 27 +++++++++++++++++++++++++++ src/capybara.js | 3 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/spec/integration/session_spec.rb b/spec/integration/session_spec.rb index bdd5f99..e9d3372 100644 --- a/spec/integration/session_spec.rb +++ b/spec/integration/session_spec.rb @@ -337,6 +337,33 @@ describe Capybara::Session do end end + context "text" do + before(:all) do + @app = Class.new(ExampleApp) do + get "/" do + <<-HTML + + + + +
+ This is my form + + +
+ + + HTML + end + end + end + + it "gets a forms text when inputs have conflicting names" do + subject.visit("/") + expect(subject.find(:css, "form").text).to eq("This is my form") + end + end + context 'click tests' do before(:all) do @app = Class.new(ExampleApp) do diff --git a/src/capybara.js b/src/capybara.js index 305c18e..46a505c 100644 --- a/src/capybara.js +++ b/src/capybara.js @@ -66,7 +66,8 @@ Capybara = { text: function (index) { var node = this.getNode(index); - var type = (node.type || node.tagName).toLowerCase(); + var type = node instanceof HTMLFormElement ? 'form' : (node.type || node.tagName).toLowerCase(); + if (!this.isNodeVisible(node)) { return ''; } else if (type == "textarea") {