Skip to content
This repository was archived by the owner on Aug 10, 2022. It is now read-only.

Commit 84cf51c

Browse files
Merge pull request #33 from applitools/develop
Release 4.0.7
2 parents c3b46d7 + a262369 commit 84cf51c

File tree

13 files changed

+205
-57
lines changed

13 files changed

+205
-57
lines changed

eyes_core/applitools/core/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
GetFloatingRegion,
1515
GetRegion,
1616
GetSelector,
17-
IgnoreRegionByRectangle,
17+
RegionByRectangle,
1818
)
1919
from .match_window_task import MatchWindowTask
2020
from .positioning import (
@@ -58,7 +58,7 @@
5858
"GetRegion",
5959
"GetFloatingRegion",
6060
"FloatingRegionByRectangle",
61-
"IgnoreRegionByRectangle",
61+
"RegionByRectangle",
6262
"GetSelector",
6363
"ServerConnector",
6464
"AppOutputWithScreenshot",

eyes_core/applitools/core/fluent/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
FloatingRegionByRectangle,
55
GetFloatingRegion,
66
GetRegion,
7-
IgnoreRegionByRectangle,
7+
RegionByRectangle,
88
)
99
from .selector import GetSelector
1010

@@ -15,6 +15,6 @@
1515
"GetRegion",
1616
"GetFloatingRegion",
1717
"FloatingRegionByRectangle",
18-
"IgnoreRegionByRectangle",
18+
"RegionByRectangle",
1919
"GetSelector",
2020
)

eyes_core/applitools/core/fluent/check_settings.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
FloatingRegionByRectangle,
88
GetFloatingRegion,
99
GetRegion,
10-
IgnoreRegionByRectangle,
10+
RegionByRectangle,
1111
)
1212

1313
if typing.TYPE_CHECKING:
@@ -62,11 +62,13 @@ def __attrs_post_init__(self):
6262
# type: () -> None
6363
self.values = CheckSettingsValues()
6464

65-
def layout(self):
66-
# type: () -> CheckSettings
65+
def layout(self, *args):
66+
# type: (*REGION_VALUES) -> CheckSettings
6767
""" Shortcut to set the match level to :py:attr:`MatchLevel.LAYOUT`. """
6868
self.values.match_level = MatchLevel.LAYOUT
69-
return self
69+
if not args:
70+
return self
71+
return self._layout_regions(*args)
7072

7173
def exact(self):
7274
# type: () -> CheckSettings
@@ -75,17 +77,21 @@ def exact(self):
7577
self.values.match_level = MatchLevel.EXACT
7678
return self
7779

78-
def strict(self):
79-
# type: () -> CheckSettings
80+
def strict(self, *args):
81+
# type: (*REGION_VALUES) -> CheckSettings
8082
""" Shortcut to set the match level to :py:attr:`MatchLevel.STRICT`. """
8183
self.values.match_level = MatchLevel.STRICT
82-
return self
84+
if not args:
85+
return self
86+
return self._strict_regions(*args)
8387

84-
def content(self):
85-
# type: () -> CheckSettings
88+
def content(self, *args):
89+
# type: (*REGION_VALUES) -> CheckSettings
8690
""" Shortcut to set the match level to :py:attr:`MatchLevel.CONTENT`. """
8791
self.values.match_level = MatchLevel.CONTENT
88-
return self
92+
if not args:
93+
return self
94+
return self._content_regions(*args)
8995

9096
def match_level(self, match_level):
9197
# type: (MatchLevel) -> CheckSettings
@@ -127,23 +133,23 @@ def ignore_regions(self, *regions):
127133

128134
ignore = ignore_regions
129135

130-
def layout_regions(self, *regions):
136+
def _layout_regions(self, *regions):
131137
# type: (*REGION_VALUES) -> CheckSettings
132138
""" Adds one or more layout regions. """
133139
self.values.layout_regions = self.__regions(
134140
regions, method_name="layout_regions"
135141
)
136142
return self
137143

138-
def strict_regions(self, *regions):
144+
def _strict_regions(self, *regions):
139145
# type: (*REGION_VALUES) -> CheckSettings
140146
""" Adds one or more strict regions. """
141147
self.values.strict_regions = self.__regions(
142148
regions, method_name="strict_regions"
143149
)
144150
return self
145151

146-
def content_regions(self, *regions):
152+
def _content_regions(self, *regions):
147153
# type: (*REGION_VALUES) -> CheckSettings
148154
""" Adds one or more content regions. """
149155
self.values.content_regions = self.__regions(
@@ -242,7 +248,7 @@ def _region_provider_from(self, region, method_name):
242248
logger.debug("calling _{}".format(method_name))
243249
if isinstance(region, Region):
244250
logger.debug("{name}: IgnoreRegionByElement".format(name=method_name))
245-
return IgnoreRegionByRectangle(region)
251+
return RegionByRectangle(region)
246252
raise TypeError("Unknown region type.")
247253

248254
def _floating_provider_from(self, region, bounds):

eyes_core/applitools/core/fluent/region.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
__all__ = (
1717
"GetFloatingRegion",
1818
"GetRegion",
19-
"IgnoreRegionByRectangle",
19+
"RegionByRectangle",
2020
"FloatingRegionByRectangle",
2121
)
2222

@@ -35,7 +35,7 @@ def get_regions(self, eyes, screenshot):
3535

3636

3737
@attr.s
38-
class IgnoreRegionByRectangle(GetRegion):
38+
class RegionByRectangle(GetRegion):
3939
_region = attr.ib() # type: Region
4040

4141
def get_regions(self, eyes, screenshot):

eyes_core/applitools/core/match_window_task.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ def perform_match(
167167
image_match_settings, regions, region_selectors
168168
)
169169

170+
if check_settings and check_settings.values.match_level is not None:
171+
image_match_settings.match_level = check_settings.values.match_level
172+
170173
user_inputs = user_inputs or []
171174
agent_setup = self._eyes.agent_setup
172175
return self._perform_match(

eyes_selenium/applitools/selenium/fluent/__init__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
FloatingRegionBy,
33
FloatingRegionByCssSelector,
44
FloatingRegionByElement,
5-
IgnoreRegionBy,
6-
IgnoreRegionByCssSelector,
7-
IgnoreRegionByElement,
5+
RegionBy,
6+
RegionByCssSelector,
7+
RegionByElement,
88
)
99
from .selector import SelectorByElement, SelectorByLocator
1010
from .selenium_check_settings import FrameLocator, SeleniumCheckSettings
@@ -14,9 +14,9 @@
1414
"Target",
1515
"SeleniumCheckSettings",
1616
"FrameLocator",
17-
"IgnoreRegionBy",
18-
"IgnoreRegionByElement",
19-
"IgnoreRegionByCssSelector",
17+
"RegionBy",
18+
"RegionByElement",
19+
"RegionByCssSelector",
2020
"FloatingRegionBy",
2121
"FloatingRegionByElement",
2222
"FloatingRegionByCssSelector",

eyes_selenium/applitools/selenium/fluent/region.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
from applitools.selenium.selenium_eyes import SeleniumEyes
1515

1616
__all__ = (
17-
"IgnoreRegionBy",
18-
"IgnoreRegionByElement",
19-
"IgnoreRegionByCssSelector",
17+
"RegionBy",
18+
"RegionByElement",
19+
"RegionByCssSelector",
2020
"FloatingRegionBy",
2121
"FloatingRegionByElement",
2222
"FloatingRegionByCssSelector",
@@ -70,15 +70,15 @@ def _element(self, driver):
7070

7171

7272
@attr.s
73-
class IgnoreRegionByElement(GetSeleniumRegion):
73+
class RegionByElement(GetSeleniumRegion):
7474
element = attr.ib() # type: AnyWebElement
7575

7676
def _element(self, driver):
7777
return self.element
7878

7979

8080
@attr.s
81-
class IgnoreRegionBy(GetSeleniumRegion):
81+
class RegionBy(GetSeleniumRegion):
8282
"""
8383
:param by: The "by" part of a selenium selector for an element which
8484
represents the ignore region
@@ -94,7 +94,7 @@ def _element(self, driver):
9494

9595

9696
@attr.s
97-
class IgnoreRegionByCssSelector(GetSeleniumRegion):
97+
class RegionByCssSelector(GetSeleniumRegion):
9898
"""
9999
:ivar selector: The css selector for an element which represents the inner region.
100100
:ivar bounds: The outer rectangle bounding the inner region.

eyes_selenium/applitools/selenium/fluent/selenium_check_settings.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
from .region import (
1616
FloatingRegionByCssSelector,
1717
FloatingRegionByElement,
18-
IgnoreRegionByCssSelector,
19-
IgnoreRegionByElement,
18+
RegionByCssSelector,
19+
RegionByElement,
2020
)
2121

2222
if typing.TYPE_CHECKING:
@@ -139,15 +139,15 @@ def frame(self, frame):
139139
def _region_provider_from(self, region, method_name):
140140
if isinstance(region, basestring):
141141
logger.debug("{name}: IgnoreRegionByCssSelector".format(name=method_name))
142-
return IgnoreRegionByCssSelector(region)
142+
return RegionByCssSelector(region)
143143
if is_list_or_tuple(region):
144144
by, val = region
145145
sel = _css_selector_from_(by, val)
146146
logger.debug("{name}: IgnoreRegionByCssSelector".format(name=method_name))
147-
return IgnoreRegionByCssSelector(sel)
147+
return RegionByCssSelector(sel)
148148
elif is_webelement(region):
149149
logger.debug("{name}: IgnoreRegionByElement".format(name=method_name))
150-
return IgnoreRegionByElement(region)
150+
return RegionByElement(region)
151151
return super(SeleniumCheckSettings, self)._region_provider_from(
152152
region, method_name
153153
)

eyes_selenium/applitools/selenium/frames.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def return_to_original_overflow(self, driver):
5555

5656
def _scroll_root_element(self, driver):
5757
scroll_root = self.scroll_root_element
58-
if scroll_root is None:
58+
if scroll_root is None or not scroll_root.is_attached_to_page:
5959
logger.debug("no scroll root element. selecting default.")
6060
scroll_root = driver.find_element_by_tag_name("html")
6161
return scroll_root

eyes_selenium/applitools/selenium/webelement.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import math
44
import typing as tp
55

6+
from selenium.common.exceptions import WebDriverException
67
from selenium.webdriver.common.by import By
78

89
from applitools.common import logger
@@ -147,6 +148,14 @@ def bounds(self):
147148
def location(self):
148149
return self._element.location
149150

151+
@property
152+
def is_attached_to_page(self):
153+
try:
154+
self.location
155+
return True
156+
except WebDriverException:
157+
return False
158+
150159
@property
151160
def size(self):
152161
return self._element.size

0 commit comments

Comments
 (0)