关于 selenium 封装后 find_elements 不到表格里的 tr 元素的问题

自己封装了base_page.py用来实现对页面对象的一些操作
html页面如下图:

base_page.py中的定位方法如下:

# 定位元素方法
    def find_element(self, *selector):
        """
        传入元组
        """
        try:
            element = self.driver.find_element(*selector)
            logger.info("通过%s找的元素已被定位 " % str(selector))
            return element
        except NoSuchElementException as e:
            logger.error("找不到元素 %s" % e)

    def find_elements(self, *selector):
        try:
            elements = self.driver.find_elements(*selector)
            logger.info('通过%s找到了%d个元素' % (str(selector), len(elements)))
            return elements
        except NoSuchElementException as e:
            logger.error("找不到元素集合 %s" % e)
#获得元素属性
    def get_attribute(self, *selector, attribute):
        try:
            element = self.find_element(*selector)
            return element.get_attribute(attribute)
        except Exception as e:
            logger.info("获得元素的%s属性失败" % e)

这个页面的类方法代码如下:

import BasePage
from selenium.webdriver.common.by import By

class DocsPage(BasePage):
    doc_links = (By.XPATH,
                 '//div[@id="viewDisplay"]/table/tbody/tr/td[8]/font/a')

    def get_docs_link(self):
        return [
            doc.get_attribute('href')
            for doc in self.find_elements(*self.doc_links)
        ]

为什么通过方法想得到的链接值

docs = DocsPage(self.driver)
docs.open(pageurl)
print(docs.get_docs_link())

提示
2020-03-14 20:26:53,503 - BasePage - INFO - 通过(‘xpath’, ‘//div[@id=”viewDisplay”]/table/tbody/tr/td[8]/font/a’)找到了0个元素
[]

Jason990420
最佳答案

XPATH '//div[@id="viewDisplay"]/table/tbody/tr/td[8]/font/a'
tbody -> tr -> td[8]
这里有两个tr, 你漏了一个.....tr[2], 是吧... file

4年前 评论
讨论数量: 3

selenium定位元素之前要确认该元素已经被加载到了,打开网页强制sleep几秒再定位测试,最好用显式等待定位。from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

4年前 评论
joeyun (楼主) 4年前
joeyun (楼主) 4年前
laodong114 (作者) 4年前
Jason990420

XPATH '//div[@id="viewDisplay"]/table/tbody/tr/td[8]/font/a'
tbody -> tr -> td[8]
这里有两个tr, 你漏了一个.....tr[2], 是吧... file

4年前 评论

楼上说的没错,xpath有问题,可以指定table来做

XPATH= '//div[@id="viewDisplay"]//table[@class="vmTable"]/tbody/tr/td[8]/font/a'

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!