Selenium / Python - How to access / count all elements inside a container that has virtual scrolling

徘徊边缘 提交于 2020-03-05 06:07:05

问题


I have a cdk-virtual-scroll-viewport container with many elements in it which means not all of its elements are rendered at once. If I scroll, I get more elements and 'lose' the previous ones.

What I want to do is to count the children of this container and process its data.

I have already done the part for counting and processing and it is working as I had checked with elements that fit in this container without needing to scroll.


The problem I have is that because this container doesn't load all data at once, if I get the count using len(), I get only what fits in the current screen I have plus a buffer of elements the developers have added.

I thought of scrolling at the end of this container in a loop until I get an exception that I can't scroll more. This of course is not the best option as it will add each time in the count this extra buffer that it gets loaded even if it is not visible at the time.

This is what I tried, but it doesn't seem to scroll at all in the page. (Checked with headless property off)

    scrollview = driver.find_element_by_tag_name("cdk-virtual-scroll-viewport")

    while True:
        try:
            print("here")

            driver.execute_script("arguments[0].scrollIntoView(true);", scrollview)

            # driver.execute_script("coordinates = arguments[0].getBoundingClientRect();scrollTo(coordinates.x,coordinates.y);", scrollview)
            time.sleep(2)
        except:
            break 

Any suggestions on how I can do this properly? The page I want to write tests for is full of virtual scrollbars so I will need a solution for doing this with selenium/python/javascript and not just doing this manually.

Thanks.

来源:https://stackoverflow.com/questions/57823926/selenium-python-how-to-access-count-all-elements-inside-a-container-that-h

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!