Skip to content

Commit 4342cbb

Browse files
author
Frederik Fix
committed
fix escaping bug when dealing with embedded regexes
1 parent 2a464f8 commit 4342cbb

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

lib/selenium/client/javascript_expression_builder.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def window_script(expression)
109109
end
110110

111111
def quote_escaped(a_string)
112-
a_string.gsub(/'/, %q<\\\'>)
112+
a_string.gsub(/\\/, "\\\\\\").gsub(/'/, %q<\\\'>)
113113
end
114114
end
115115
end

test/unit/selenium/client/javascript_expression_builder_tests.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@
3636
assert_equal "//div[@id=\\'demo-effect-appear\\']",
3737
builder.quote_escaped("//div[@id='demo-effect-appear']")
3838
end
39-
39+
40+
test "quote_escaped escapes backslashes" do
41+
builder = Selenium::Client::JavascriptExpressionBuilder.new
42+
assert_equal "webratlink=evalregex:/Pastry Lovers \\\\(Organizer\\\\)/",
43+
builder.quote_escaped("webratlink=evalregex:/Pastry Lovers \\(Organizer\\)/")
44+
end
45+
4046
test "text_match matches on entire string when pattern is a string" do
4147
builder = Selenium::Client::JavascriptExpressionBuilder.new
4248
assert_equal "element.innerHTML == 'some text'",
@@ -60,7 +66,13 @@
6066
assert_match(/element\s+=\s+selenium.browserbot.findElement\('a_locator'\);/m,
6167
builder.find_element('a_locator').script)
6268
end
63-
69+
70+
test "find_element should handle embedded evalregex locators" do
71+
builder = Selenium::Client::JavascriptExpressionBuilder.new
72+
assert_match(/element\s+=\s+selenium.browserbot.findElement\('webratlink=evalregex:\/Pastry Lovers \\\\\(Organizer\\\\\)\/'\);/m,
73+
builder.find_element("webratlink=evalregex:/Pastry Lovers \\(Organizer\\)/").script)
74+
end
75+
6476
test "javascript_framework_for :prototype returns JavascriptFrameworks::Prototype" do
6577
builder = Selenium::Client::JavascriptExpressionBuilder.new
6678
assert_equal Selenium::Client::JavascriptFrameworks::Prototype,

0 commit comments

Comments
 (0)