我可以使用Robot框架对表格​​的多个页面中的行进行计数吗?

时间:2019-01-30 09:36:14

标签: selenium robotframework

我对机器人还很陌生,仅在工作一个月左右就一直在独自工作。

当前,我正在尝试对正在测试的应用程序中的表中的行总数进行计数。 (基于Chrome)

这就是我正在使用的:

${count}=  get element count  //table[@class='options-table']/tbody/tr

哪个带回值5-这正在计算第一页。但是,由于有多个页面,我希望它能带回76。

有人可以帮助您恢复多页上的行数吗?

${count}=  get element count  //table[@class='options-table']/tbody/tr
  

预期结果:76

     

实际结果:5(仅首页)

2 个答案:

答案 0 :(得分:3)

为避免在Robot Framework关键字中使用稍微复杂的逻辑(在页面中迭代,累加元素计数),您可以在Python中使用write your own keyword

在这种情况下,您需要一个关键字,其元素为locator(具体为//table[@class='options-table']/tbody/tr)和列表page urls

要实现此类关键字,请创建一个像ExtendedSeleniumLib.py这样的文件:

from robot.libraries.BuiltIn import BuiltIn

def get_element_count_from_pages(locator, *page_urls):
    seleniumlib = BuiltIn().get_library_instance('SeleniumLibrary')

    element_count = 0

    for url in page_urls:
        seleniumlib.go_to(url)
        element_count += seleniumlib.get_element_count(locator)

    return element_count

,从您的测试代码中,您可以像这样使用它:

*** Settings ***
Library     SeleniumLibrary
Library     ExtendedSeleniumLib

*** Variables ***
${SE HEADER LOCATOR}    //a[@class='site-header--link fs-headline1 fw-bold']

*** Test Cases ***
Count Elements On Multiple Pages Example
    [Setup]    Open Browser    https://stackoverflow.com    Firefox
    Maximize Browser Window
    Set Selenium Speed      0.1

    ${count}=   Get Element Count From Pages    ${SE HEADER LOCATOR}
    ...    https://iot.stackexchange.com/
    ...    https://sqa.stackexchange.com/
    ...    https://robotics.stackexchange.com/

    Should Be Equal As Integers     ${count}    3

    [Teardown]    Close Browser

此示例遍历三个Stack Exchange站点并计算标头元素。由于每页上应该只有一个,预期结果是3。因此,您应该能够计算页面上的表行。

关于如何配置库和资源的搜索路径,请参阅《机器人框架用户指南》中的相关章节; Configuring where to search libraries and other extensions。如果将python文件放在机器人文件所在的目录中,则无需执行任何操作。

答案 1 :(得分:1)

请检查以下代码,由于我不知道该网页,因此它假定总页数不会超过100,您可以从网页中获取此编号(如果有)。另外,如果您确定每页总行数始终为5,则可以使用以下公式 [5 *(总页数-1)+最后一页的行数] 这样可以为您提供所有页面的总行数,而无需遍历所有页面。另外,请添加任何时间同步步骤以成功运行。

Get Count of All Pages
    ${next_page_locator}    Set Variable    enter next page icon/link xpath here
    ${first_row_locator}    Set Variable    enter first row xpath here
    ${total_count}    set variable    0
    : FOR    ${index}    IN RANGE    1    100
    \    Wait Until Element Is Visible    ${first_row_locator}
    \    ${count}    get element count    //table[@class='options-table']/tbody/tr
    \    ${total_count}    evaluate    ${count} + ${total_count}
    \    ${next_link_present}    Run Keyword And Return Status    Page Should Contain Element    ${next_page_locator}
    \    exit for loop if    ${next_link_present} is ${False}
    \    Click Element    ${next_page_locator}