find_element_by_link_text应该找到此链接吗?

时间:2019-09-03 19:28:08

标签: python selenium

快速提问。

我有此代码:

    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)仅找到了第二个。 此行为是一致的,并且对于某些“框架”中的其他链接(例如AlbumsSolos,然后在Add Track(是标准的Django管理员)中,以相同的方式起作用。

enter image description here

我会发现在硒中,命令find_element_by_link_text不可靠,但这是功能吗?

谢谢

编辑:换句话说,也许元素中的类和标题可能是个问题?

Html代表“添加曲目”:

<li>
   <a href="/admin/albums/track/add/" class="addlink">
     Add track
   </a>
</li>

Edit2:django版本也不同。也许html发生了变化?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用XPath,而不是使用find_element_by_link_text。

driver.findElement(By.XPath("//a[contains(text(), 'Add track')]"));

这比find_element_by_link_text复杂,并且如果链接更改,它也不会中断,因为我们只查看标记内的纯文本。

希望这会有所帮助。