我正在开发一个Robot Framework测试,有效地点击两个元素(工作正常)然后确认你想要在HTML中弹出的对话框中做某事(所以,不是警报)。一切正常,直到对话框。该框包含总共两个按钮。这些按钮在HTML中具有<button>
标签名称,但是使用Angular JS创建,并且文本为&#34;是&#34;和&#34;不&#34;。我想点击标有&#34;是&#34;的那个。我知道的每个定位器方法都选择标有&#34;是&#34;的按钮。点击标有&#34; No&#34;的那个,而我点击的所有内容&#34; No&#34;工作得很好。
我无法发布HTML本身(专有)或我的精确机器人框架代码和变量(专门为专有网站编写,他们明确提到网站的部分内容,所以我更喜欢错误地&#34;没有被解雇/起诉&#34;)。上面的信息非常通用,幸运的是,它几乎可以应用于任何没有使用标准弹出消息的网站,并且是用Angular JS编写的,所以我可以解决这个问题。
但是,这是我的机器人框架代码的一般化版本,它有麻烦。
Click Element ${item}
Sleep 1s
Click Element ${edit_button}
Sleep 1s
Click Element ${yes_button}
我尝试过使用xpath(generalized和full),dom形式为dom = document.getElementsByTagName(&#34; button&#34;)[0](在浏览器控制台中找到的位置),将其更改为Click Button Yes
,并通过文字找到它&#34;是&#34;使用以下(完全通用且可共享)关键字:
Click Element by Text
# EXAMPLE USAGE
# Click Element by Text "text on the element" id="midlevellocationoftext" button
# NOTE: Does not account for extra spaces at the beginning or end, text must be exact
# NOTE: Allows for injections on purpose to allow user to be more exact with their location
[Arguments] ${text} ${location}=* ${elementtype}=*
Click Element xpath=//*[@${location}]//${elementtype}[text()=${text}]
问题完全不是我的代码而是HTML / AngularJS,但在手动测试中,元素仍然可以点击,所以我必须找到一种方法来点击它。只是为了消除通常的可能性,它没有id,类是不合理的长度级别并且在两个按钮之间共享(除了点击操作&#34;检查&#34;和&#34;关闭&# 34;),并且逐个像素的位置从屏幕尺寸变为屏幕尺寸,并且不会在我的屏幕尺寸上运行。
要涵盖其他潜在问题:我发现它不符合可访问HTML的标准做法;我有ExtendedSelenium2Library,集合,操作系统和两个自定义库(两者都没有使用);我在谷歌浏览器工作;我不是开发者;由于测试开发人员无法点击一个按钮,因此开发人员忙于在网站的其他部分工作,并且需要一个紧迫的期限来添加ID。
所以,我向社区提出的问题:我尝试了什么,我能尝试什么,以及为什么赢得经过验证的解决方案有效?如果您需要更具体的信息,我会尽我所能。如果你能以某种方式认识到这是Angular JS或HTML中的一个错误,并以某种方式知道潜在的修复,那真棒。让我知道,我可以让开发者知道。