机器人框架同时点击更多对象

时间:2017-01-12 14:36:56

标签: python selenium automated-tests robotframework selenium2library

我需要能够点击更多可点击的元素,这些元素是SVG图表的一部分。

我可以单独点击任何一个栏,但我还必须选择多个栏,然后点击另一个链接,在另一个视图中打开所有选定项目的数据。

我想在循环中执行此操作,例如

Press key    ${BAR ELEMENT}   CTRL

然后点击最后一个条目。但我不断收到Press Key关键字的错误:

WebDriverException: Message: unknown error: cannot focus element
(Session info: chrome=55.0.2883.87)
(Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 6.1.7601 SP1 x86_64)

即使我将FOCUS ${BAR ELEMENT}放在Press key之前,也会引发相同的错误。

单击${BAR ELEMENT}可以正常工作(即使在循环中)。

另外,我甚至不确定是否可以使用CTRL(或者可能是CONTROL或我必须使用ASCII代码),但我想知道。只是我无法完成这一步,所以有没有人有任何想法可以提供帮助?

最好能够独立地按住CTRL键和元素,因为在这种情况下,将元素聚焦到CTRL是没有意义的,但Press key不能没有定位器。

我附上了我需要点击的条形图片(蓝色)以供参考: enter image description here

1 个答案:

答案 0 :(得分:3)

所以我找到了解决方案:

我准备了python函数来保存ctrl并释放ctrl

def hold_ctrl(self):
    self.get_action_chain().key_down(Keys.LEFT_CONTROL)
    self.get_action_chain().perform()

def release_ctrl(self):
    self.get_action_chain().key_up(Keys.LEFT_CONTROL)
    self.get_action_chain().perform()

然后我将其用于执行点击的循环中:

some code before..    
hold ctrl
    :for   ${value}   IN   @{list}
    \       wait until element is visible    ${BARS}
    \       ${bar_xpath}=   bar of specific value  ${BARS}   ${value}
    \       wait until element is visible   ${bar_xpath}
    \       click element   ${bar_xpath}
    release ctrl
    release ctrl
    ${bar_xpath}=   bar of specific value  ${BARS}   ${value} 
    click element   ${bar_xpath}

唯一奇怪的是我必须使用release ctrl两次,否则它不起作用......