Java 当缩放级别为100%时,如何单击UI上不可见的元素?

Java 当缩放级别为100%时,如何单击UI上不可见的元素?,java,python,selenium,selenium-webdriver,virtualbox,Java,Python,Selenium,Selenium Webdriver,Virtualbox,若我的浏览器的缩放级别为100%,其中一个按钮不会出现在UI上,所以一旦我使用下面的代码放大,那个特定的按钮就会出现在UI上 driver.execute_script("document.body.style.zoom='80%'") 但,即使该按钮以放大状态出现在UI上,对该特定按钮的操作也不会发生,相反,我会收到此错误消息 {WebDriverException}消息:未知错误:元素 在点891568处不可单击。另外 元素将接收单击:会话信息: chrome=58.0.3029.110驾

若我的浏览器的缩放级别为100%,其中一个按钮不会出现在UI上,所以一旦我使用下面的代码放大,那个特定的按钮就会出现在UI上

driver.execute_script("document.body.style.zoom='80%'")
但,即使该按钮以放大状态出现在UI上,对该特定按钮的操作也不会发生,相反,我会收到此错误消息

{WebDriverException}消息:未知错误:元素 在点891568处不可单击。另外 元素将接收单击:会话信息: chrome=58.0.3029.110驾驶员信息:chromedriver=2.29.461591 62ebf098771772160f391d75e589dc567915b233,平台=Windows NT 6.1.7601 SP1 x86

我在本地机器上并没有遇到问题,因为当浏览器的缩放级别为100%时,那个特定的按钮会出现在UI上,它工作得很好,因为我不需要放大

但由于我必须使用客户端机器远程连接虚拟机,所以我遇到了这个UI问题。由于虚拟盒屏幕出现在我的客户机的屏幕内,所以它的高度会降低,并且该特定按钮会从底部的UI中消失

因此,需要放大以执行此操作,并再次将缩放级别重置为100%。我有没有做错什么,或者有没有其他方法来解决这个问题

编辑:附加屏幕截图
您可以使用类来模拟滚动


我也有同样的问题。驱动程序通常应该在每次单击时滚动到元素,确实如此,但它滚动的方式只是使元素几乎看不见

所以它有时可以被另一个元素覆盖,而驱动程序认为元素是可见的,然后出现异常

我在这里找到了一个不错的解决办法:

居中页面,使元素位于页面中间:

在C中:


我一开始试着缩小,但至少在Chrome上,Selenium在缩小时根本不能工作,所以这不起作用。

对于测试自动化,如果我们必须处理远程机器。在沙司实验室的情况下,认真对待屏幕分辨率总是有益的

在当今响应迅速的网站世界中,我们需要经常更改浏览器窗口大小,这一要求正变得更加有效

在sauce实验室中,我们使用以下程序更改客户端机器的分辨率

capabilities.setCapability("screenResolution", "1920x1080");

对于不同的设置,我们可能需要按照上面@ShoaibAkhtar评论中提到的步骤进行操作。

您是否可以尝试滚动元素而不是缩小JavascriptExecutor jse=JavascriptExecutordriver;jse.executeScriptwindow.Scrollby0250;如果面临同样的问题请告知我更改客户的解决方案machine@ShoaibAkhtar为什么同时使用Java和Python标记?你的客户是用什么语言写的?你也可以考虑发布有问题的代码片段吗?就目前情况而言,调试您的问题相当困难。另外,a.f.a.i.k.在执行以下操作时,Webdriver不受显示端口的约束。单击此按钮可能会出现另一个问题,原因是此操作不起作用。@TrimantAsoftware解决方案我现在附带了有问题的屏幕截图,即使使用滚动条按钮也不起作用appear@san1deep2set3hi我已经设定了最大分辨率,例如,1400*796用于虚拟机,1400*900用于我的客户机,减少它将显示太多的大字体。另外,由于虚拟盒屏幕出现在客户机内部,所以其高度会降低,从而导致此问题
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();
capabilities.setCapability("screenResolution", "1920x1080");