Best Capybara code snippet using Capybara.Driver.readonly
element.rb
Source:element.rb
...103 # @param [Hash{}] options Driver specific options for how to set the value. Take default values from `Capybara#default_set_options` - See {Capybara::configure}104 #105 # @return [Capybara::Node::Element] The element106 def set(value, **options)107 raise Capybara::ReadOnlyElementError, "Attempt to set readonly element with value: #{value}" if readonly?108 options = session_options.default_set_options.to_h.merge(options)109 synchronize { base.set(value, options) }110 self111 end112 ##113 #114 # Select this node if is an option element inside a select tag115 #116 # @return [Capybara::Node::Element] The element117 def select_option118 warn "Attempt to select disabled option: #{value || text}" if disabled?119 synchronize { base.select_option }120 self121 end122 ##123 #124 # Unselect this node if is an option element inside a multiple select tag125 #126 # @return [Capybara::Node::Element] The element127 def unselect_option128 synchronize { base.unselect_option }129 self130 end131 ##132 #133 # Click the Element134 #135 # @!macro click_modifiers136 # Both x: and y: must be specified if an offset is wanted, if not specified the click will occur at the middle of the element137 # @overload $0(*modifier_keys, **offset)138 # @param *modifier_keys [:alt, :control, :meta, :shift] ([]) Keys to be held down when clicking139 # @option offset [Integer] x X coordinate to offset the click location from the top left corner of the element140 # @option offset [Integer] y Y coordinate to offset the click location from the top left corner of the element141 # @return [Capybara::Node::Element] The element142 def click(*keys, **offset)143 synchronize { base.click(keys, offset) }144 self145 end146 ##147 #148 # Right Click the Element149 #150 # @macro click_modifiers151 # @return [Capybara::Node::Element] The element152 def right_click(*keys, **offset)153 synchronize { base.right_click(keys, offset) }154 self155 end156 ##157 #158 # Double Click the Element159 #160 # @macro click_modifiers161 # @return [Capybara::Node::Element] The element162 def double_click(*keys, **offset)163 synchronize { base.double_click(keys, offset) }164 self165 end166 ##167 #168 # Send Keystrokes to the Element169 #170 # @overload send_keys(keys, ...)171 # @param keys [String, Symbol, Array<String,Symbol>]172 #173 # Examples:174 #175 # element.send_keys "foo" #=> value: 'foo'176 # element.send_keys "tet", :left, "s" #=> value: 'test'177 # element.send_keys [:control, 'a'], :space #=> value: ' ' - assuming ctrl-a selects all contents178 #179 # Symbols supported for keys180 # :cancel181 # :help182 # :backspace183 # :tab184 # :clear185 # :return186 # :enter187 # :shift188 # :control189 # :alt190 # :pause191 # :escape192 # :space193 # :page_up194 # :page_down195 # :end196 # :home197 # :left198 # :up199 # :right200 # :down201 # :insert202 # :delete203 # :semicolon204 # :equals205 # :numpad0206 # :numpad1207 # :numpad2208 # :numpad3209 # :numpad4210 # :numpad5211 # :numpad6212 # :numpad7213 # :numpad8214 # :numpad9215 # :multiply - numeric keypad *216 # :add - numeric keypad +217 # :separator - numeric keypad 'separator' key ??218 # :subtract - numeric keypad -219 # :decimal - numeric keypad .220 # :divide - numeric keypad /221 # :f1222 # :f2223 # :f3224 # :f4225 # :f5226 # :f6227 # :f7228 # :f8229 # :f9230 # :f10231 # :f11232 # :f12233 # :meta234 # :command - alias of :meta235 #236 # @return [Capybara::Node::Element] The element237 def send_keys(*args)238 synchronize { base.send_keys(*args) }239 self240 end241 ##242 #243 # Hover on the Element244 #245 # @return [Capybara::Node::Element] The element246 def hover247 synchronize { base.hover }248 self249 end250 ##251 #252 # @return [String] The tag name of the element253 #254 def tag_name255 synchronize { base.tag_name }256 end257 ##258 #259 # Whether or not the element is visible. Not all drivers support CSS, so260 # the result may be inaccurate.261 #262 # @return [Boolean] Whether the element is visible263 #264 def visible?265 synchronize { base.visible? }266 end267 ##268 #269 # Whether or not the element is checked.270 #271 # @return [Boolean] Whether the element is checked272 #273 def checked?274 synchronize { base.checked? }275 end276 ##277 #278 # Whether or not the element is selected.279 #280 # @return [Boolean] Whether the element is selected281 #282 def selected?283 synchronize { base.selected? }284 end285 ##286 #287 # Whether or not the element is disabled.288 #289 # @return [Boolean] Whether the element is disabled290 #291 def disabled?292 synchronize { base.disabled? }293 end294 ##295 #296 # Whether or not the element is readonly.297 #298 # @return [Boolean] Whether the element is readonly299 #300 def readonly?301 synchronize { base.readonly? }302 end303 ##304 #305 # Whether or not the element supports multiple results.306 #307 # @return [Boolean] Whether the element supports multiple results.308 #309 def multiple?310 synchronize { base.multiple? }311 end312 ##313 #314 # An XPath expression describing where on the page the element can be found315 #...
node.rb
Source:node.rb
...21 set_checkbox(value)22 elsif input_field?23 set_input(value)24 elsif textarea?25 if self[:readonly]26 warn "Attempt to set readonly element with value: #{value} \n * This will raise an exception in a future version of Capybara"27 else28 native.content = value.to_s29 end30 end31 end32 def select_option33 if select_node['multiple'] != 'multiple'34 select_node.find_xpath(".//option[@selected]").each { |node| node.native.remove_attribute("selected") }35 end36 native["selected"] = 'selected'37 end38 def unselect_option39 if select_node['multiple'] != 'multiple'40 raise Capybara::UnselectNotAllowed, "Cannot unselect option from single select box."41 end42 native.remove_attribute('selected')43 end44 def click45 if tag_name == 'a' && !self[:href].nil?46 method = self["data-method"] if driver.options[:respect_data_method]47 method ||= :get48 driver.follow(method, self[:href].to_s)49 elsif (tag_name == 'input' and %w(submit image).include?(type)) or50 ((tag_name == 'button') and type.nil? or type == "submit")51 associated_form = form52 Capybara::RackTest::Form.new(driver, associated_form).submit(self) if associated_form53 end54 end55 def tag_name56 native.node_name57 end58 def visible?59 string_node.visible?60 end61 def checked?62 string_node.checked?63 end64 def selected?65 string_node.selected?66 end67 def disabled?68 if %w(option optgroup).include? tag_name69 string_node.disabled? || find_xpath("parent::*")[0].disabled?70 else71 string_node.disabled?72 end73 end74 def path75 native.path76 end77 def find_xpath(locator)78 native.xpath(locator).map { |n| self.class.new(driver, n) }79 end80 def find_css(locator)81 native.css(locator, Capybara::RackTest::CSSHandlers.new).map { |n| self.class.new(driver, n) }82 end83 def ==(other)84 native == other.native85 end86protected87 def unnormalized_text(check_ancestor_visibility = true)88 if !string_node.visible?(check_ancestor_visibility)89 ''90 elsif native.text?91 native.text92 elsif native.element?93 native.children.map do |child|94 Capybara::RackTest::Node.new(driver, child).unnormalized_text(false)95 end.join96 else97 ''98 end99 end100private101 def string_node102 @string_node ||= Capybara::Node::Simple.new(native)103 end104 # a reference to the select node if this is an option node105 def select_node106 find_xpath('./ancestor::select').first107 end108 def type109 native[:type]110 end111 def form112 if native[:form]113 native.xpath("//form[@id='#{native[:form]}']").first114 else115 native.ancestors('form').first116 end117 end118 def set_radio(value)119 other_radios_xpath = XPath.generate { |x| x.anywhere(:input)[x.attr(:name).equals(self[:name])] }.to_s120 driver.dom.xpath(other_radios_xpath).each { |node| node.remove_attribute("checked") }121 native['checked'] = 'checked'122 end123 def set_checkbox(value)124 if value && !native['checked']125 native['checked'] = 'checked'126 elsif !value && native['checked']127 native.remove_attribute('checked')128 end129 end130 def set_input(value)131 if text_or_password? && attribute_is_not_blank?(:maxlength)132 # Browser behavior for maxlength="0" is inconsistent, so we stick with133 # Firefox, allowing no input134 value = value.to_s[0...self[:maxlength].to_i]135 end136 if Array === value #Assert multiple attribute is present137 value.each do |v|138 new_native = native.clone139 new_native.remove_attribute('value')140 native.add_next_sibling(new_native)141 new_native['value'] = v.to_s142 end143 native.remove144 else145 if self[:readonly]146 warn "Attempt to set readonly element with value: #{value} \n *This will raise an exception in a future version of Capybara"147 else148 native['value'] = value.to_s149 end150 end151 end152 def attribute_is_not_blank?(attribute)153 self[attribute] && !self[attribute].empty?154 end155 def checkbox?156 input_field? && type == 'checkbox'157 end158 def input_field?159 tag_name == 'input'160 end...
readonly
Using AI Code Generation
1Capybara.visit('/')2Capybara.fill_in('q', :with => 'capybara')3Capybara.click_button('Google Search')4Capybara.visit('/')5Capybara.fill_in('q', :with => 'capybara')6Capybara.click_button('Google Search')7Capybara.visit('/')8Capybara.fill_in('q', :with => 'capybara')9Capybara.click_button('Google Search')
readonly
Using AI Code Generation
1fill_in('q', :with => 'ruby')2click_button('Google Search')3puts page.find(:css, "input[name='q']").readonly?4puts page.find(:css, "input[name='q']").readonly?5puts page.find(:css, "input[name='q']").disabled?6puts page.find(:css, "input[name='q']").disabled?7puts page.find(:css, "input[name='q']").visible?8puts page.find(:css, "input[name='q']").visible?9puts page.find(:css, "input[name='q']").checked?10puts page.find(:css, "input[name='q']").checked?
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!