Skip to content

Commit bae318f

Browse files
committed
Click Image with modifier
1 parent 61e5259 commit bae318f

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

atest/acceptance/keywords/click_element_modifier.robot

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ Click Button Modifier CTRL
1717
Click Button Click me! modifier=CTRL
1818
Element Text Should Be output CTRL click
1919

20+
Click Image Modifier CTRL
21+
Click Image robot modifier=CTRL
22+
Element Text Should Be output CTRL click
23+
2024
Click Element Modifier ALT
2125
Click Element Button alt
2226
Element Text Should Be output ALT click

atest/resources/html/javascript/click_modifier.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@
3333
<h1>Clicking with modifier</h1>
3434
<p id="info">Watch the output below</p>
3535
<p id="output">initial output</p>
36-
<button type="button" id="Button" onmousedown="isKeyPressed(event)">Click me!</button>
37-
<a href="popupwindow.html" onmousedown="isKeyPressed(event)" onClick="return popup(this, 'myName')">link text</a>
36+
<button type="button" id="Button" onmousedown="isKeyPressed(event)">Click me!</button><br>
37+
<a href="popupwindow.html" onmousedown="isKeyPressed(event)" onClick="return popup(this, 'myName')">link text</a><br>
38+
<img src="../robot.png" id="robot" onmousedown="isKeyPressed(event)"><br>
3839
</body>
3940
</html>
4041
<!DOCTYPE html>

src/SeleniumLibrary/keywords/element.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -526,22 +526,30 @@ def click_button(self, locator, modifier=False):
526526
element = self.find_element(locator, tag='button')
527527
element.click()
528528
else:
529-
self._click_with_modifier(locator, 'button', modifier)
529+
self._click_with_modifier(locator, ['button', 'input'], modifier)
530530

531531
@keyword
532-
def click_image(self, locator):
532+
def click_image(self, locator, modifier=False):
533533
"""Clicks an image identified by ``locator``.
534534
535535
See the `Locating elements` section for details about the locator
536536
syntax. When using the default locator strategy, images are searched
537537
using ``id``, ``name``, ``src`` and ``alt``.
538+
539+
See the `Click Element` keyword for details about the
540+
``modifier`` argument.
541+
542+
The ``modifier`` argument is new in SeleniumLibrary 3.3
538543
"""
539-
self.info("Clicking image '%s'." % locator)
540-
element = self.find_element(locator, tag='image', required=False)
541-
if not element:
542-
# A form may have an image as it's submit trigger.
543-
element = self.find_element(locator, tag='input')
544-
element.click()
544+
if is_falsy(modifier):
545+
self.info("Clicking image '%s'." % locator)
546+
element = self.find_element(locator, tag='image', required=False)
547+
if not element:
548+
# A form may have an image as it's submit trigger.
549+
element = self.find_element(locator, tag='input')
550+
element.click()
551+
else:
552+
self._click_with_modifier(locator, ['image', 'input'], modifier)
545553

546554
@keyword
547555
def click_link(self, locator, modifier=False):
@@ -560,7 +568,7 @@ def click_link(self, locator, modifier=False):
560568
self.info("Clicking link '%s'." % locator)
561569
self.find_element(locator, tag='link').click()
562570
else:
563-
self._click_with_modifier(locator, 'link', modifier)
571+
self._click_with_modifier(locator, ['link', 'link'], modifier)
564572

565573
@keyword
566574
def click_element(self, locator, modifier=False):
@@ -589,15 +597,18 @@ def click_element(self, locator, modifier=False):
589597
self.info("Clicking element '%s'." % locator)
590598
self.find_element(locator).click()
591599
else:
592-
self._click_with_modifier(locator, None, modifier)
600+
self._click_with_modifier(locator, [None, None], modifier)
593601

594602
def _click_with_modifier(self, locator, tag, modifier):
595-
self.info("Clicking %s '%s' with %s." % (tag if tag else 'element', locator, modifier))
603+
self.info("Clicking %s '%s' with %s." % (tag if tag[0] else 'element', locator, modifier))
596604
modifier = self.parse_modifier(modifier)
597605
action = ActionChains(self.driver)
598606
for item in modifier:
599607
action.key_down(item)
600-
action.click(self.find_element(locator, tag=tag))
608+
element = self.find_element(locator, tag=tag[0], required=False)
609+
if not element:
610+
element = self.find_element(locator, tag=tag[1])
611+
action.click(element)
601612
for item in modifier:
602613
action.key_up(item)
603614
action.perform()

0 commit comments

Comments
 (0)