Robotframework:我如何获得这种结果=>;页面必须(不应该)包含元素

Robotframework:我如何获得这种结果=>;页面必须(不应该)包含元素,robotframework,Robotframework,我是机器人框架的新手,对于我的问题我会有一些帮助 在一个页面上,我想验证一个单词是否存在于定位器上。我已经使用了页面应该包含Element关键字,并且它部分工作:的确,包含单词的元素被找到了,但是当其他元素(相同类型)不包含这个单词时,没有错误 示例(我正在处理销售清单): 该页面包含许多此类定位器: //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.da

我是机器人框架的新手,对于我的问题我会有一些帮助

在一个页面上,我想验证一个单词是否存在于定位器上。我已经使用了
页面应该包含Element
关键字,并且它部分工作:的确,包含单词的元素被找到了,但是当其他元素(相同类型)不包含这个单词时,没有错误

示例(我正在处理销售清单): 该页面包含许多此类定位器:

//*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"]
  • “div”元素包含“locator1”,其中包含“House”
  • “div”元素包含“locator1”,其中包含“House”
  • “div”元素包含“locator1”,其中包含“Box”
  • 等等
所以我写了这个关键词

Page Should Contain Element    //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"][contains(., "House")]
但结果并不是我所期望的(如果在定位器1上建立了“房子”以外的另一个词,则会出现错误)


我希望得到以下结果:所有locator1元素都必须包含单词“House”。如果定位器1包含不同的单词,则测试必须失败。

根据库文档,您可以设置“限制”参数,该参数允许您设置页面上要检查的元素数量

例如,如果要检查元素在页面上出现两次,则可以将限制设置为2

Page Should Contain Element    //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"][contains(., "House")]  limit=2
从文件:

limit参数可用于定义页面应包含多少元素。当limit为None(默认)时,页面可包含一个或多个元素。当limit为数字时,页面必须包含相同数量的元素

话虽如此,如果您使用的是旧版本的库,可能需要使用不同的关键字,如“Xpath应匹配X次”,但在新版本中不推荐使用该关键字

基于元素中的其他单词而不失败的另一个问题是,您使用的Xpath只关注包含文本“House”的元素,因此在运行此函数时,其他元素将被完全忽略

如果您想检查以确保元素中不包含其他文本,并且您知道它们将是什么,那么您可以使用其他关键字

Page Should Not Contain Element  //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"][contains(., "Box")]
但是,如果您不知道文本将是什么,那么您可能需要通过获取web元素文本值并在循环中遍历它们,并检查每个元素的文本是否与“House”匹配,从而以不同的方式进行处理

它看起来像这样:

Check Element Contains Text 'House' 
   @{elements}=  Get Webelements  //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"]
   FOR  ${element}  IN  @{elements}
     ${text}=  Get Text  ${element}
     Should Be Equal As Strings  ${text}  House
   END

不过,我无法测试它以绝对确定。

根据库文档,您可以设置一个“限制”参数,该参数允许您设置页面上要检查的元素数量

例如,如果要检查元素在页面上出现两次,则可以将限制设置为2

Page Should Contain Element    //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"][contains(., "House")]  limit=2
从文件:

limit参数可用于定义页面应包含多少元素。当limit为None(默认)时,页面可包含一个或多个元素。当limit为数字时,页面必须包含相同数量的元素

话虽如此,如果您使用的是旧版本的库,可能需要使用不同的关键字,如“Xpath应匹配X次”,但在新版本中不推荐使用该关键字

基于元素中的其他单词而不失败的另一个问题是,您使用的Xpath只关注包含文本“House”的元素,因此在运行此函数时,其他元素将被完全忽略

如果您想检查以确保元素中不包含其他文本,并且您知道它们将是什么,那么您可以使用其他关键字

Page Should Not Contain Element  //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"][contains(., "Box")]
但是,如果您不知道文本将是什么,那么您可能需要通过获取web元素文本值并在循环中遍历它们,并检查每个元素的文本是否与“House”匹配,从而以不同的方式进行处理

它看起来像这样:

Check Element Contains Text 'House' 
   @{elements}=  Get Webelements  //*[@class="resultats mode_liste ng-scope"]/div[@ng-repeat="annonce in resultats.data.annonces "]//h2/a/strong[@class="ng-binding"]
   FOR  ${element}  IN  @{elements}
     ${text}=  Get Text  ${element}
     Should Be Equal As Strings  ${text}  House
   END

不过,我无法测试它以绝对确定。

我认为我必须使用循环,但我不知道如何用Python编写代码。循环说“对于每个元素A,必须找到单词“Box”。这些是选项的总和:我想我必须使用循环,但我不知道如何用Python编码。循环表示“对于每个元素A,必须找到单词“Box”。这些是选项的总和: