查找\u元素\u按\u链接\u文本应该找到此链接吗?

2024-06-16 11:07:28 发布

您现在位置:Python中文网/ 问答频道 /正文

快速提问。你知道吗

我有这个密码:

    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>

以前(Python3.4 django 1.8)找到了这两个,现在(Python3.7.4,django 2.0)只找到了第二个。 这种行为是一致的,对于某些“框架”中的其他链接也是一样的,比如AlbumsSolos,然后是Add Track(是标准的django管理)

enter image description here

我会看到在selenium中comand find_element_by_link_text是不可靠的,但是这是一个特性吗?你知道吗

谢谢

编辑:换句话说,元素中的类和标题可能是个问题?你知道吗

Html对于“添加曲目”:

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

Edit2:django版本也不同。也许html里有什么变化?你知道吗


Tags: djangoself版本browseralbumbyadminlink
1条回答
网友
1楼 · 发布于 2024-06-16 11:07:28

与其使用find\ element\ by\ link\ text,不如改用XPath。你知道吗

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

这比按链接文本查找元素要简单,而且如果链接更改,它不会中断,因为我们只查看标记内的纯文本。你知道吗

希望这有帮助。你知道吗

相关问题 更多 >