【问题标题】:Losing WebElement context inside for loop ? Why?在 for 循环中丢失 WebElement 上下文?为什么?
【发布时间】:2014-12-08 17:36:56
【问题描述】:

我正在尝试以这种方式在 for 循环内访问父 WebElement <div class="post"> 的子 WebElements (img 和 p 标签)。

self.posts = self.driver.find_elements_by_xpath("//div[@class='post']")

for post in self.posts:
    self.image = post.find_element_by_xpath(".//a/img")
    str = self.image.get_attribute("src").replace("b.", ".")

    self.title = post.find_element_by_xpath(".//div/p")
    self.title. # <<<<<------- Has no attributes or functions

请注意,我已使用相对 XPATH 路径来访问引用其父 post(.//a/img 和 .//div/p)的子 WebElements

我可以获得self.image 的WebElement 对象上下文,它具有所有WebElement 属性。如您所见,我可以使用self.image.get_attribute()

但是,当我在循环中并尝试将 post 变量实例化为 self.title 时,该变量没有任何属性,并且我的智能感知说 “没有建议”

我的疑问是,为什么...为什么我可以使用 post 引用来实例化 WebElement 对象 self.image 但我不能对 self.title 做同样的事情

【问题讨论】:

  • 这纯粹是 代码完成(“我的智能感知”)的问题,还是您的 Selenium 代码没有以您的方式执行想?这两个问题之间存在显着差异。请编辑您的问题以澄清。
  • @Louis 如果如上所述,第一次智能感知在循环内工作正常。我相信它第二次也能正常工作,问题来自语言领域或我对 python 的缺乏经验。

标签: python unit-testing testing selenium webdriver


【解决方案1】:

Awwhnn ¬¬ 我觉得自己很愚蠢......

@Louis 这是一个智能感知问题。你是对的。无论智能感知在说什么......我都会赞成你的评论给你荣誉,因为它对我有帮助。谢谢!

有效:

self.posts = self.driver.find_elements_by_xpath("//div[@class='post']")

for post in self.posts:
    self.image = post.find_element_by_xpath(".//a/img")
    str = self.image.get_attribute("src").replace("b.", ".")

    self.title = post.find_element_by_xpath(".//div/p")
    print(self.title.text)

无论如何,我已经吸取了教训......

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多