{"record":{"id":"7d735c35ba04a830","repo":"SeleniumHQ/selenium","slug":"cannot-find-elements-by-how-inspect","errorCode":null,"errorMessage":"cannot find elements by #{how.inspect}","messagePattern":"cannot find elements by #(.+?)","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"rb/lib/selenium/webdriver/common/search_context.rb","lineNumber":84,"sourceCode":"        how, what = extract_args(args)\n\n        by = SearchContext.finders[how.to_sym]\n        raise ArgumentError, \"cannot find element by #{how.inspect}\" unless by\n\n        bridge.find_element_by by, what, ref\n      end\n\n      #\n      # Find all elements matching the given arguments\n      #\n      # @see SearchContext#find_element\n      #\n\n      def find_elements(*args)\n        how, what = extract_args(args)\n\n        by = SearchContext.finders[how.to_sym]\n        raise ArgumentError, \"cannot find elements by #{how.inspect}\" unless by\n\n        bridge.find_elements_by by, what, ref\n      end\n\n      private\n\n      def extract_args(args)\n        case args.size\n        when 2\n          args\n        when 1\n          arg = args.first\n\n          unless arg.respond_to?(:shift)\n            raise ArgumentError,\n                  \"expected #{arg.inspect}:#{arg.class} to respond to #shift\"\n          end\n","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/SeleniumHQ/selenium/blob/aa36b38e696a0909e973bdf5e2f9031ffe842c4b/rb/lib/selenium/webdriver/common/search_context.rb#L66-L102","documentation":"Raised by SearchContext#find_elements (plural) when the 'how' (locator strategy key) is not recognized in the FINDERS registry. Functionally identical to the singular find_element version (error 421) but for the multi-element query path. Valid keys are the same: :class, :class_name, :css, :id, :link, :link_text, :name, :partial_link_text, :relative, :tag_name, :xpath.","triggerScenarios":"Calling find_elements(:linkText, 'Click') (camelCase, invalid) instead of :link_text. Using :partial_link (truncated) instead of :partial_link_text. Passing a strategy key from another binding like :ByXPath or :ClassName.","commonSituations":"Porting locator code from Java/Python/JS bindings that use different constant names. Autocomplete typos. Using a strategy string from the W3C protocol instead of the Ruby symbol.","solutions":["Use a registered symbol from FINDERS: :class, :class_name, :css, :id, :link, :link_text, :name, :partial_link_text, :relative, :tag_name, :xpath.","Use :link_text or :partial_link_text for link text searches (snake_case).","Register a custom strategy via SearchContext.extra_finders if needed."],"exampleFix":"// before\nelements = driver.find_elements(:linkText, 'Read more')\n\n// after\nelements = driver.find_elements(:link_text, 'Read more')","handlingStrategy":"type-guard","validationCode":"VALID_FINDERS = Selenium::WebDriver::SearchContext.finders.keys\n\ndef safe_find_elements(driver, how, what)\n  raise ArgumentError, \"Unsupported finder: #{how.inspect}\" unless VALID_FINDERS.include?(how.to_sym)\n  driver.find_elements(how, what)\nend","typeGuard":"def valid_locator_strategy?(how)\n  Selenium::WebDriver::SearchContext.finders.key?(how.to_sym)\nend","tryCatchPattern":"begin\n  driver.find_elements(how, what)\nrescue ArgumentError => e\n  raise unless e.message.include?('cannot find elements by')\n  # log and return empty array as graceful degradation\n  warn \"Invalid locator strategy '#{how}'; returning empty list.\"\n  []\nend","preventionTips":["Share a single locator-strategy validation utility across both find_element and find_elements calls.","Validate strategy symbols at test-framework initialization, not per-call in hot loops.","Lint your codebase for non-standard strategy symbols like :tag or :classname."],"tags":["find-elements","locator-strategy","argument-error","ruby"],"backgroundTag":null,"analyzedSha":"aa36b38e696a0909e973bdf5e2f9031ffe842c4b","analyzedAt":"2026-08-14T02:32:32.244Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}