我正在开发一个Robot Framework测试,有效地点击两个元素(工作正常),然后确认你想在HTML中弹出的对话框中做某事(所以,不是警报) . 一切正常,直到对话框 . 该框包含总共两个按钮 . 这些按钮在HTML中具有 <button> 标记名称,但是使用Angular JS创建,并且文本为"Yes"和"No" . 我想点击标有"Yes"的那个 . 我知道的每个定位器方法都选择标记为"Yes"的按钮,然后单击标记为"No"的按钮,而我单击"No"所做的一切工作正常 .

我不能发布HTML本身(专有)或我的精确机器人框架代码和变量(专门为专有网站编写,他们明确提到网站的部分,所以我更喜欢错误地“不被解雇/ /起诉“) . 上面的信息非常通用,幸运的是,它几乎可以应用于任何不使用标准弹出消息的网站,并且是用Angular JS编写的,所以我可以解决这个问题 .

但是,这是我的机器人框架代码的一般化版本,它有麻烦 .

Click Element   ${item}
Sleep           1s
Click Element   ${edit_button}
Sleep           1s
Click Element   ${yes_button}

我尝试使用xpath(generalized和full),dom形式为dom = document.getElementsByTagName("button")[0](在浏览器控制台中找到的位置),将其更改为 Click Button Yes ,然后通过text "Yes"使用以下(完全通用且可共享)关键字:

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,类是两个按钮之间的长期和共享级别(除了点击操作“检查”和“关闭”),以及框的位置逐个像素从屏幕大小更改为屏幕大小,并且不会在我的屏幕大小上运行 .

涵盖其他潜在问题:我知道它不遵循可访问HTML的标准做法;我有ExtendedSelenium2Library,集合,操作系统和两个自定义库(两者都没有使用);我在Google Chrome上工作;我不是开发人员;并且开发人员忙于在网站的其他部分工作,因为测试开发人员无法单击一个按钮,因此需要在最后期限内添加ID .

所以,我向社区提出的问题:我没有尝试过什么,我可以尝试什么,为什么经过验证的解决方案不起作用?如果您需要更多具体信息,我会尽我所能 . 如果你能以某种方式认识到这是Angular JS或HTML中的一个错误,并以某种方式知道潜在的修复,那真棒 . 让我知道所以我可以让开发人员知道 .