机器人框架,Python - 使用动态内容处理页面上的延迟加载

时间:2017-06-15 14:01:03

标签: python selenium automated-tests lazy-loading robotframework

我有一个包含动态生成表格的页面(行是动态生成的)。在我的测试中我不知道会有多少行。我只是从所有行创建一个字典,然后与另一个字典进行比较。 但是该表具有延迟加载,因此当行数较高时,应该存在的某些行在第一眼看不到“”但是需要向下滚动才能得到它们。所以那些行不包含在我的字典中然后它失败了...... 但同样,我不知道何时滚动(如果表中有少量行,无处可滚动)以及滚动的位置(我不指望任何特定元素),期望的行数等等。

有谁知道如何处理这样的情况?因为我没有。  :-(谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试解决此问题,如下所示:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.common.exceptions import TimeoutException

# Get the current number of rows
current_rows_number = len(driver.find_elements_by_xpath('//tr'))
while True:
    # Scroll down to make new XHR (request more table rows)
    driver.find_element_by_tag_name('body').send_keys(Keys.END)
    try:
        # Wait until number of rows increased       
        wait(driver, 5).until(lambda: len(driver.find_elements_by_xpath('//tr')) > current_rows_number)
        # Update variable with current rows number
        current_rows_number = len(driver.find_elements_by_xpath('//tr'))
    # If number of rows remains the same after 5 seconds passed, break the loop
    # as there no more rows to receive
    except TimeoutException:
        break

# Now you can scrape the entire table

P.S。不幸的是,我不熟悉RobotFramework,因此上面的代码是纯Selenium + Python。我希望它可以很容易地解释:)