如何识别Salesforce Lightning for Selenium中的元素

时间:2017-09-06 05:39:16

标签: selenium automation salesforce salesforce-lightning

我正在尝试使用Selenium自动化Salesforce闪电,但却遇到了识别元素的问题。原因,它具有动态ID和其他属性要么很长,要么它们不是唯一的。

例如,

<a id="170:1968;a" class="textUnderline outputLookupLink slds-truncate forceOutputLookup" 
data-refid="recordId" 
data-recordid="0059E000001aOCSQA2" 
data-special-link="true" 
href="#/sObject/0059E000001aOCSQA2/view" 
target="_blank" rel="noreferrer" 
title="" data-aura-rendered-by="170:1968;a" data-aura-class="forceOutputLookup"/>

在上面的代码中,ID是动态的,Class不是唯一的,并且所有Lookup元素都与它相关联。此外,绝对路径不太受信任,因此我试图找到处理这些元素的任何具体选项。任何帮助将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

在这里,如果id属性值的至少一部分是静态的,则可以尝试使用contains方法。 从您的代码中,您可以尝试

//a[contains(@id,"a")]/ //--extended xpath--

根据给定的html代码, a 标记的id属性中的“a”看起来是静态的,而其余的则更改。

答案 1 :(得分:0)

您可以要求开发人员使用aura:id向闪电组件提供ID。 这样就不会生成动态ID。

答案 2 :(得分:0)

您可以尝试使用字段标签并获取其父节点,然后获取子节点或兄弟节点以找到相关的文本/文本框等。

例如。您正在“帐户编辑/新建”页面中,并且想要在“帐户名称”字段的文本框中填写一个值。因此,您可以首先尝试使用//*[text()='Account Name']/parent::*查找覆盖两者字段标签和文本框的元素。

然后您可以检查文本框是“兄弟”还是“孩子”。如果是“孩子”,则尝试使用//*[text()='Account Name']/parent::*(/parent::*)//*[attributes for the text box]; 如果是“兄弟”,则尝试使用//*[text()='Account Name']/parent::*(/parent::*)/following-sibling::*[attributes for the text box]

您可以使用此逻辑在所有标准闪电页面中找到所有类型的字段。