当缩放级别为 100% 时,如何单击 UI 上不可见的元素?
How to click on element which is not visible on UI when zoom level is 100%?
如果我的浏览器的缩放级别是 100%,其中一个按钮不会出现在 UI 上,所以一旦我使用下面的代码放大,那个特定的按钮就会出现在 UI
driver.execute_script("document.body.style.zoom='80%'")
但是即使按钮出现在 UI 放大状态下,该特定按钮上的操作也不会发生,而是我收到此错误消息
{WebDriverException}Message: unknown error: Element
is not clickable at point (891, 568). Other
element would receive the click: (Session info:
chrome=58.0.3029.110) (Driver info: chromedriver=2.29.461591
(62ebf098771772160f391d75e589dc567915b233),platform=Windows NT
6.1.7601 SP1 x86)
我在本地计算机上没有遇到问题,因为当浏览器的缩放级别为 100% 时,该特定按钮出现在 UI 上,它运行良好,因为我不必放大。
但是由于我必须在使用客户端计算机远程连接的虚拟盒子上工作,所以我遇到了这个 UI 问题。由于虚拟框屏幕出现在我的客户机屏幕内,因此它的高度降低了,并且该特定按钮从底部的 UI 中消失了。
因此需要放大才能执行此操作,然后再次将缩放级别重置为 100%。我是不是做错了什么或者有其他方法可以解决这个问题吗?
编辑:附上截图
您可以使用 ActionChains class
模拟滚动
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_...
ActionChains(driver).move_to_element(element).perform()
element.click()
我遇到了同样的问题。驱动程序通常应该在每次点击时滚动到元素,确实如此,但它滚动到元素几乎不可见。
所以有时会被其他元素覆盖,而driver认为元素是可见的,然后出现异常。
我在这里找到了一个很好的解决方法:selenium scroll element into (center of) view
页面居中,因此元素位于页面中间:
在 C# 中:
var js = d as IJavaScriptExecutor;
String scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"
+ "var elementTop = arguments[0].getBoundingClientRect().top;"
+ "window.scrollBy(0, elementTop-(viewPortHeight/2));";
js.ExecuteScript(scrollElementIntoMiddle, element);
element.Click();
我一开始尝试缩小,但至少在 Chrome 下,Selenium 在缩小时根本无法工作,所以没用。
对于测试自动化,如果我们必须处理远程机器(例如,在 Sauce 实验室的情况下),认真对待屏幕分辨率总是有益的。
在当今的响应式网站世界中,我们需要经常更改浏览器 window 大小,这一要求变得更加有效。
在 sauce labs 中,我们使用以下方法以编程方式更改客户端计算机的分辨率
capabilities.setCapability("screenResolution", "1920x1080");
对于不同的设置,我们可能需要按照上面@ShoaibAkhtar 评论中提到的步骤进行操作。
如果我的浏览器的缩放级别是 100%,其中一个按钮不会出现在 UI 上,所以一旦我使用下面的代码放大,那个特定的按钮就会出现在 UI
driver.execute_script("document.body.style.zoom='80%'")
但是即使按钮出现在 UI 放大状态下,该特定按钮上的操作也不会发生,而是我收到此错误消息
{WebDriverException}Message: unknown error: Element is not clickable at point (891, 568). Other element would receive the click: (Session info: chrome=58.0.3029.110) (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 6.1.7601 SP1 x86)
我在本地计算机上没有遇到问题,因为当浏览器的缩放级别为 100% 时,该特定按钮出现在 UI 上,它运行良好,因为我不必放大。
但是由于我必须在使用客户端计算机远程连接的虚拟盒子上工作,所以我遇到了这个 UI 问题。由于虚拟框屏幕出现在我的客户机屏幕内,因此它的高度降低了,并且该特定按钮从底部的 UI 中消失了。
因此需要放大才能执行此操作,然后再次将缩放级别重置为 100%。我是不是做错了什么或者有其他方法可以解决这个问题吗?
编辑:附上截图
您可以使用 ActionChains class
模拟滚动from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_...
ActionChains(driver).move_to_element(element).perform()
element.click()
我遇到了同样的问题。驱动程序通常应该在每次点击时滚动到元素,确实如此,但它滚动到元素几乎不可见。
所以有时会被其他元素覆盖,而driver认为元素是可见的,然后出现异常。
我在这里找到了一个很好的解决方法:selenium scroll element into (center of) view
页面居中,因此元素位于页面中间:
在 C# 中:
var js = d as IJavaScriptExecutor;
String scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"
+ "var elementTop = arguments[0].getBoundingClientRect().top;"
+ "window.scrollBy(0, elementTop-(viewPortHeight/2));";
js.ExecuteScript(scrollElementIntoMiddle, element);
element.Click();
我一开始尝试缩小,但至少在 Chrome 下,Selenium 在缩小时根本无法工作,所以没用。
对于测试自动化,如果我们必须处理远程机器(例如,在 Sauce 实验室的情况下),认真对待屏幕分辨率总是有益的。
在当今的响应式网站世界中,我们需要经常更改浏览器 window 大小,这一要求变得更加有效。
在 sauce labs 中,我们使用以下方法以编程方式更改客户端计算机的分辨率
capabilities.setCapability("screenResolution", "1920x1080");
对于不同的设置,我们可能需要按照上面@ShoaibAkhtar 评论中提到的步骤进行操作。