快速提问。
我有此代码:
albums_links = self.browser.\
find_elements_by_link_text('Albums')
# albums_links = self.browser.find_elements_by_xpath(
# '//a[contains(@href, "albums")]') # this works (enough), I leave here for reference
self.assertEqual(albums_links[0].get_attribute('href'),
self.live_server_url + '/admin/albums/')
self.assertEqual(albums_links[1].get_attribute('href'),
self.live_server_url + '/admin/albums/album/')
正在工作。现在,我已经重新安装了操作系统,重做了venv等,并且代码不再起作用。从理论上讲,唯一不同的是python版本和django版本,但我不确定,因为更改很大。
所以,我问该代码是应该找到这两个链接还是只能找到一个链接:
<caption>
<a href="/admin/albums/" class="section" title="Models in the Albums application">Albums</a>
</caption>
<tr class="model-album">
<th scope="row"><a href="/admin/albums/album/">Albums</a></th>
之前(python 3.4 django 1.8)找到了两个,而现在(python 3.7.4,django 2.0)仅找到了第二个。
此行为是一致的,并且对于某些“框架”中的其他链接(例如Albums
或Solos
,然后在Add Track
(是标准的Django管理员)中,以相同的方式起作用。
我会发现在硒中,命令find_element_by_link_text
不可靠,但这是功能吗?
谢谢
编辑:换句话说,也许元素中的类和标题可能是个问题?
Html
代表“添加曲目”:
<li>
<a href="/admin/albums/track/add/" class="addlink">
Add track
</a>
</li>
Edit2:django版本也不同。也许html发生了变化?
答案 0 :(得分:2)
您可以尝试使用XPath,而不是使用find_element_by_link_text。
driver.findElement(By.XPath("//a[contains(text(), 'Add track')]"));
这比find_element_by_link_text复杂,并且如果链接更改,它也不会中断,因为我们只查看标记内的纯文本。
希望这会有所帮助。