我对机器人还很陌生,仅在工作一个月左右就一直在独自工作。
当前,我正在尝试对正在测试的应用程序中的表中的行总数进行计数。 (基于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(仅首页)
答案 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}