问题
看来您真的想影响window.screen.width 和window.screen.height 返回的内容。这通常是不可能的,除非在 Chrome 中使用device mode(和toolbar)时这些值会发生变化。那么,让我们触发这些,对吧?
// open inspector and responsive design mode
driver.actions()
.keyDown(Key.CONTROL)
.keyDown(Key.SHIFT)
.sendKeys('im')
.keyUp(Key.SHIFT)
.keyUp(Key.CONTROL)
.perform();
不幸的是,这个won't work in Chrome。引用这个答案:
Chrome 驱动程序使用 Chrome 远程调试协议与浏览器通信。这也是开发者控制台使用的相同协议。不幸的是,Chrome 的设计使得一次只能使用该协议连接一个客户端,因此这意味着开发人员工具或驱动程序,但不能同时使用两者。 — JimEvans
无赖。但是,看起来这可以工作using Firefox。不幸的是,目前执行操作似乎是currently not possible 使用 Selenium + geckodriver。也无法使用 JavaScript 打开此模式。但是,我们可以将键发送到元素。
解决方案
以下对我有用。
var webdriver = require('selenium-webdriver'),
firefox = require('selenium-webdriver/firefox'),
By = webdriver.By,
Key = webdriver.Key,
driver = null;
// construct driver
var profile = new firefox.Profile(),
devicePreset = [{
width: 640,
height: 480,
key: '640x480',
name: 'Mobile Device'
}];
profile.setPreference('devtools.responsiveUI.presets',
JSON.stringify(devicePreset));
var opts = new firefox.Options();
opts.setProfile(profile);
var builder = new webdriver.Builder().forBrowser('firefox');
builder.setFirefoxOptions(opts);
driver = builder.build();
driver.get('http://www.google.com');
// open responsive design mode
driver.findElement(By.css('input[name="q"]'))
.sendKeys(Key.chord(Key.CONTROL, Key.SHIFT, 'm'));
driver.get('https://www.iplocation.net/find-ip-address');
请注意,我为 Firefox 设置了一个首选项,指示在响应式设计模式中使用的大小。您可以将其更改为您喜欢的任何屏幕尺寸。