在标题中动态查找元素,然后单击它们以在python selenium中进行验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在标题中动态查找元素,然后单击它们以在python selenium中进行验证相关的知识,希望对你有一定的参考价值。

这是我的代码

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

class Runfftest():
    def test(self):
        """
        Inistitate the ff browser
        launch the browser
        :return:
        """
        baseUrl = "https://letskodeit.teachable.com/p/practice"
        driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
        driver.maximize_window()
        driver.get(baseUrl)
        driver.implicitly_wait(10)

        header_by_xpath = driver.find_element_by_xpath("//*[@id='navbar']")
        links_in_header = header_by_xpath.find_elements(By.TAG_NAME,"a")
        size_of_links = len(links_in_header)
        print(size_of_links)

        for linkinheader in links_in_header:
            linkinheader.click()


ff = Runfftest()
ff.test()

我能够找到一个元素并点击它,但是当我这样做时,它会抛出一个错误。

答案

第一次点击后你的错误是:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

这意味着点击后你有了全新的html页面,旧页面中的所有元素都是陈旧的(新页面上不存在)。

请注意,links_in_header列表包含元素列表,但不包含链接(URL)本身。所以你可以做这样的事情(而不是点击):

links_in_header = header_by_xpath.find_elements(By.TAG_NAME,"a")
# get urls from tags
links_in_header = [x.get_attribute('href') for x in links_in_header]
for linkinheader in links_in_header:
    driver.get(linkinheader)
另一答案

所以我不明白一件事,你通过xpath找到元素,为什么在搜索标题后你试图点击标题?

遵循此代码,它的工作原理; ps你甚至选择了一个错误的xpath:

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

class Runfftest():
    def test(self):
        """
        Inistitate the ff browser
        launch the browser
        :return:
        """
        baseUrl = "https://letskodeit.teachable.com/p/practice"
        driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
        driver.get(baseUrl)
        driver.implicitly_wait(10)
        header_by_xpath = driver.find_element_by_xpath(".//*[@id='navbar']/div/div/a")
        header_by_xpath.click()

ff = Runfftest()
ff.test()

PS:记得在完成后关闭浏览器:

driver.close()

以上是关于在标题中动态查找元素,然后单击它们以在python selenium中进行验证的主要内容,如果未能解决你的问题,请参考以下文章

编写 jQuery 以在单击时更改动态 iframe 的尺寸 [关闭]

使用 VSTS 进行负载测试。从 CSV 文件中搜索,然后单击第一个元素

嵌入场景时 A 帧鼠标跟踪发生变化

动态创建元素的事件绑定?

动态创建元素的事件绑定?

动态创建元素的事件绑定?