summaryrefslogtreecommitdiff
path: root/bs4
diff options
context:
space:
mode:
Diffstat (limited to 'bs4')
-rw-r--r--bs4/element.py20
-rw-r--r--bs4/tests/test_tree.py11
2 files changed, 22 insertions, 9 deletions
diff --git a/bs4/element.py b/bs4/element.py
index 3baafe3..584e171 100644
--- a/bs4/element.py
+++ b/bs4/element.py
@@ -446,9 +446,11 @@ class PageElement(object):
combination.
"""
if operator == '=':
- # string representation of attribute is equal to value
+ # string representation of `attribute` is equal to `value`
return lambda el: el._attr_value_as_string(attribute) == value
elif operator == '~':
+ # space-separated list representation of `attribute`
+ # contains `value`
def _includes_value(element):
attribute_value = element.get(attribute, [])
if not isinstance(attribute_value, list):
@@ -456,17 +458,19 @@ class PageElement(object):
return value in attribute_value
return _includes_value
elif operator == '^':
- # string representation of attribute starts with value
- return lambda el: el._attr_value_as_string(attribute, '').startswith(value)
+ # string representation of `attribute` starts with `value`
+ return lambda el: el._attr_value_as_string(
+ attribute, '').startswith(value)
elif operator == '$':
- # string represenation of attribute ends with value
- return lambda el: el._attr_value_as_string(attribute, '').endswith(value)
+ # string represenation of `attribute` ends with `value`
+ return lambda el: el._attr_value_as_string(
+ attribute, '').endswith(value)
elif operator == '*':
- # string representation of attribute contains value
+ # string representation of `attribute` contains `value`
return lambda el: value in el._attr_value_as_string(attribute, '')
elif operator == '|':
- # string representation of attribute is either exactly
- # value or starts with value-
+ # string representation of `attribute` is either exactly
+ # `value` or starts with `value` and then a dash.
def _is_or_starts_with_dash(element):
attribute_value = element._attr_value_as_string(attribute, '')
return (attribute_value == value or attribute_value.startswith(
diff --git a/bs4/tests/test_tree.py b/bs4/tests/test_tree.py
index bfc4218..3f32736 100644
--- a/bs4/tests/test_tree.py
+++ b/bs4/tests/test_tree.py
@@ -1301,7 +1301,7 @@ class TestNavigableStringSubclasses(SoupTest):
self.assertEqual(soup.encode(), b"<!DOCTYPE foo>\n")
-class TestSoupSelector(SoupTest):
+class TestSoupSelector(TreeTest):
HTML = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
@@ -1528,3 +1528,12 @@ class TestSoupSelector(SoupTest):
('[blah]', []),
('p[blah]', []),
)
+
+ def test_select_on_element(self):
+ # Other tests operate on the tree; this operates on an element
+ # within the tree.
+ inner = self.soup.find("div", id="main")
+ selected = inner.select("div")
+ # The <div id="inner"> tag was selected. The <div id="footer">
+ # tag was not.
+ self.assertSelectsIDs(selected, ['inner'])