【发布时间】:2022-03-01 22:52:58
【问题描述】:
很抱歉,如果这已被问及并回答。我进行了搜索,但没有找到。
【问题讨论】:
-
这个问题适用于 Windows 还是 Mac?
标签: selenium
很抱歉,如果这已被问及并回答。我进行了搜索,但没有找到。
【问题讨论】:
标签: selenium
使用 Selenium Driver 的窗口定位命令:
var monitor = Screen.FromPoint(new Point(Screen.PrimaryScreen.Bounds.Right + 1, Screen.PrimaryScreen.Bounds.Top));
var seleniumDriver = new ChromeDriver(options);
seleniumDriver.Manage().Window.Position = new Point(monitor.Bounds.X, monitor.Bounds.Y);
var coypuDriver = new MultimonWebDriver(seleniumDriver, Browser.Chrome);
var rv = new BrowserSession(sessionConfiguration, coypuDriver);
使用命令行参数配置驱动程序。我更喜欢这个,因为解决方案 #1 在处理移动命令之前会导致驱动程序服务器闪烁显示窗口:
var monitor = Screen.FromPoint(new Point(Screen.PrimaryScreen.Bounds.Right + 1, Screen.PrimaryScreen.Bounds.Top));
var options = new ChromeOptions();
options.AddArgument(String.Format("--window-position={0},{1}", monitor.Bounds.X, monitor.Bounds.Y));
var seleniumDriver = new ChromeDriver(options);
var coypuDriver = new MultimonWebDriver(seleniumDriver, Browser.Chrome);
var rv = new BrowserSession(sessionConfiguration, coypuDriver);
MultimonWebDriver 只是公开对受保护构造函数的访问:
public class MultimonWebDriver : SeleniumWebDriver
{
public MultimonWebDriver(IWebDriver webDriver, Browser browser) : base(webDriver, browser)
{
}
}
【讨论】:
在python中:
browser = webdriver.Chrome()
browser.set_window_position(2000, 0)
【讨论】:
实际上有一个相当简单的方法可以做到这一点。有一种名为“set_window_position”的方法,它接受负值。所以我希望浏览器在我的左侧屏幕上打开,所以一个简单的负 1000px 像素将其拖入足以让最大化窗口选择左侧屏幕。
driver.set_window_position(-1000, 0)
driver.maximize_window()
因此,根据屏幕尺寸和您想要的位置,进行一些计算并将其拖到那里!
来源:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.firefox.webdriver(本示例选择 Firefox)
【讨论】:
在 OSX Mavericks 中,您可以在单击并按住 Dock 中的图标时从“选项”菜单中分配桌面。这解决了我的问题。
【讨论】:
我使用这个不是很花哨但快速的方法来实现它。因为我不仅希望它出现在我的第二个屏幕上,而且还希望它最大化,所以我不必在坐标上过于精确。任何高于 2000 的 X 坐标通常位于我所有开发机器的第二个屏幕上:(此示例使用 chromedriver,但适用于任何 IWebDriver)
chrome = new ChromeDriver();
chrome.Manage().Window.Position = new System.Drawing.Point(2000, 1); // To 2nd monitor.
chrome.Manage().Window.Maximize();
【讨论】:
Wailord 的回答对我有用,但它总是打开窗口然后移动它。所以有一个短暂的时刻,它会阻止我的编辑器。
Chrome 有一个窗口位置的命令行开关--window-position=x,y
https://peter.sh/experiments/chromium-command-line-switches/#window-position
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('window-position=2000,0') # opens at x=2000,y=0 from the start
driver = webdriver.Chrome(options=options)
【讨论】:
我有 2 台 1920x1080 显示器,我将浏览器窗口移动到第二台显示器并在那里最大化。
获取屏幕分辨率
java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
将浏览器移动到第二个显示器并最大化
if (width <= 1920) {
Point point = new Point(width, 0);
driver.manage().window().setPosition(point);
driver.manage().window().maximize();
}
如果您的分辨率比典型显示器宽,请以更真实的分辨率打开浏览器(这是可选的,但我建议这样做)
else
{
Point point = new Point(0, 0);
driver.manage().window().setPosition(point);
Dimension targetWindowSize = new Dimension(1920, 1080);
driver.manage().window().setSize(targetWindowSize);
}
【讨论】:
在辅助监视器上运行测试对于调试非常有用。不幸的是,您无法指定应在哪个监视器上打开浏览器。选项有:
您还可以使用将在第二台显示器上运行的虚拟机 - 只需将其拖到那里即可。
【讨论】:
使用这个条件:
WebDriver chrome1 = new ChromeDriver();
WebDriver chrome2 = new ChromeDriver();
chrome1.manage().window().maximize();//display 1
chrome2.manage().window().setPosition(new Point(2000,0));//display 2
Thread.sleep(1000);// 1 sec
chrome2.manage().window().maximize();//maximize display 2
【讨论】:
如果您运行的是 Windows 7 或更高版本,您可以通过在“更改显示设置”下将所需的显示器设置为主显示器来实现此目的。现在,任何新的浏览器窗口都将在此打开。请记住,这当然会影响您的工具栏等,这可能会或可能不会令人讨厌。这肯定比让浏览器窗口稳定地丢在脸上更烦人。
【讨论】:
在 Mac 上,您可以在 System Preferences > Displays > Arrangement 中控制它
主屏幕顶部有一个白条。将其拖到您希望呈现浏览器的屏幕上
【讨论】:
我的解决方案是安装 VNC 服务器,在其中一台显示器中打开 VNC,然后通过 VNC 启动 selenium。 然后你总是有一个 selenium 浏览器的监视器,而不会在每次启动测试时打开烦人的窗口
【讨论】:
对于Java:
//imports:
import java.awt.*;
import java.awt.event.InputEvent;
driver = new FirefoxDriver();
//drag & drop to my right screen in debug mode:
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("jdwp") >= 0;
if(isDebug) {
Robot robot = new Robot();
robot.mouseMove(800, 10);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseMove(2800, 100);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
driver.manage().window().maximize();
}
driver.manage().window().setPosition(point); 对我不起作用。
【讨论】:
我注意到通过在下面设置这些内容,我的浏览器总是在同一个显示器中打开(我有两个显示器,一个 eDP 和一个辅助 HDMI 显示器)。可能跟职位有关:
# console log
d = desired_capabilities.DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'browser':'ALL' }
# Driver
self.driver = webdriver.Chrome(desired_capabilities=d)
self.driver.implicitly_wait(5) # seconds
self.driver.set_window_size(800, 800)
self.driver.set_window_position(0, 0)
【讨论】:
我注意到对我来说它总是在主监视器中打开。所以我从 OSX 显示排列选项窗口更改了主显示。
【讨论】:
如果您要打开浏览器窗口的监视器位于带有 IDE 的监视器的 左侧,请尝试负值。在 Java 中:
WebDriver driver = new FirefoxDriver();
driver.manage().window().setPosition(new Point(-1500, 0));
【讨论】:
只需将 Mac“菜单栏”放在您希望打开浏览器的显示器上。这将设置默认监视器。
【讨论】:
我找到了一种解决方法,在我的情况下,它在 Windows 10 中对我有用。我只是通过显示设置将我的第二台显示器作为主显示器:
Main Display via Display Settings
希望这对您也有帮助!
【讨论】:
我在 Java 中使用它,它正在工作
public void maximizeToNextMonitor(WebDriver driver, String server) {
driver.get(server);
Window window = driver.manage().window();
window.maximize();
window.setPosition(new org.openqa.selenium.Point(window.getSize().getWidth(), 0));
window.maximize();
}
【讨论】: