Selenium/Python功能测试:根据link文本查找兄弟元素
Selenium/Python functional test: find sibling element according to link text
我正在 运行 使用 Selenium 和 Python 进行功能测试。在测试中,我最终想用 hash-tag
class 检查 p
标签的文本。此 p
标签的内容取决于 a
标签的文本,它是 h3
的子元素,h3
是 p
标签的兄弟元素,带有 hash-tag
class.
例如(参见下面的标记)如果 a
标签的文本是 'Paramount’s Pop Culture Staying Power' 那么我想:
- 获取那个
a
标签的 h3
父级
- 获取
h3
标签的第一个同级标签,即 p
标签和 hash-tag
class
- 检查
p
标签的文本是否为“#IMDB”
- 获取带有
hash-tag
class 的下一个 p
标签
- 检查
p
标签的文本是否为“#Paramount”
到目前为止,我只能通过文本获取 a
标签,但我不确定如何使用 hash-tag
class 遍历到 p 标签:
def setUpClass(cls):
cls.browser = webdriver.Chrome()
def test_DB_tags(self):
paramount_link = self.browser.find_element_by_link_text('Paramount’s Pop Culture Staying Power')
link_text
用于锚标记,即 HTML 中的 a
标记。
h3
那个 a
标签的父级
//a[text()='your string']/..
/..
表示从当前节点转到父标签。
获取 h3
标签的第一个同级标签,即带有 hash-tag class
的 p
标签
//a[text()='your string']/../following-sibling::p[@class='lead db-explanation']
检查 p
标签的文本是否为 '#IMDB'
//a[text()='your string']/../following-sibling::p[text()='#IMDb']
- 使用
a
hash-tag class
获取下一个 p
标签
这个和2nd Point一样,5th也可以写。试试自己写,让我知道我可以验证。
阅读有关 xpath 轴的更多信息here
如果我明白你要找的是什么,你可以这样做:
- 从
a
标签元素获取它的文本。
sentence = driver.find_element_by_xpath('//a[@href]').text
- 从句子中获取第一个单词
first_word = sentence.split(' ', 1)[0]
现在,要使用 p
标记和 hash-tag
class 找到您要查找的第一个元素并获取它的文本,可以按以下方式完成:
first_p_text = driver.find_element_by_xpath('(//a[@href]/../..//p[@class="hash-tag"])[1]').text
第二个 p
文本将是
second_p_text = driver.find_element_by_xpath('(//a[@href]/../..//p[@class="hash-tag"])[2]').text
现在断言:
self.assertTrue(first_p_text in first_word)
self.assertTrue(second_p_text in "#IMDB")
我正在 运行 使用 Selenium 和 Python 进行功能测试。在测试中,我最终想用 hash-tag
class 检查 p
标签的文本。此 p
标签的内容取决于 a
标签的文本,它是 h3
的子元素,h3
是 p
标签的兄弟元素,带有 hash-tag
class.
例如(参见下面的标记)如果 a
标签的文本是 'Paramount’s Pop Culture Staying Power' 那么我想:
- 获取那个
a
标签的h3
父级 - 获取
h3
标签的第一个同级标签,即p
标签和hash-tag
class - 检查
p
标签的文本是否为“#IMDB” - 获取带有
hash-tag
class 的下一个 - 检查
p
标签的文本是否为“#Paramount”
p
标签
到目前为止,我只能通过文本获取 a
标签,但我不确定如何使用 hash-tag
class 遍历到 p 标签:
def setUpClass(cls):
cls.browser = webdriver.Chrome()
def test_DB_tags(self):
paramount_link = self.browser.find_element_by_link_text('Paramount’s Pop Culture Staying Power')
link_text
用于锚标记,即 HTML 中的 a
标记。
h3
那个a
标签的父级//a[text()='your string']/..
/..
表示从当前节点转到父标签。
获取
的h3
标签的第一个同级标签,即带有hash-tag class
p
标签//a[text()='your string']/../following-sibling::p[@class='lead db-explanation']
检查
p
标签的文本是否为'#IMDB'
//a[text()='your string']/../following-sibling::p[text()='#IMDb']
- 使用
a
hash-tag class
获取下一个
p
标签
这个和2nd Point一样,5th也可以写。试试自己写,让我知道我可以验证。
阅读有关 xpath 轴的更多信息here
如果我明白你要找的是什么,你可以这样做:
- 从
a
标签元素获取它的文本。
sentence = driver.find_element_by_xpath('//a[@href]').text
- 从句子中获取第一个单词
first_word = sentence.split(' ', 1)[0]
现在,要使用 p
标记和 hash-tag
class 找到您要查找的第一个元素并获取它的文本,可以按以下方式完成:
first_p_text = driver.find_element_by_xpath('(//a[@href]/../..//p[@class="hash-tag"])[1]').text
第二个 p
文本将是
second_p_text = driver.find_element_by_xpath('(//a[@href]/../..//p[@class="hash-tag"])[2]').text
现在断言:
self.assertTrue(first_p_text in first_word)
self.assertTrue(second_p_text in "#IMDB")