我正在尝试编写 UI 自动化脚本来执行 vs 代码扩展的自动化测试。在阅读了关于 spectron/ vs code test 的教程后,我发现他们都需要源代码来执行测试。我正在尝试从 QA 方面执行,因此我在我的 vs 代码上安装了扩展,但现在我需要执行自动化。
我可以使用 selenium-webdriver 启动 vs code 并打开扩展,但无法访问在 vs code web 视图下加载的元素。VS 代码隐藏了扩展的 web 元素,因此 selenium-webdriver 找不到这些元素。
{ describe, it, after, before } require('mocha');
// const Config = require('../../config/config.json');
const webdriver = require('selenium-webdriver'),
By = webdriver.By
const assert = require('chai').assert
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
try{
describe('Launch VS Code', function(){
this.timeout(20000);
let driver= new webdriver.Builder()
// The "9515" is the port opened by chrome driver.
.usingServer('http://localhost:9515')
.withCapabilities({
chromeOptions: {
// Here is the path to your Electron binary"
binary: 'path to vs code'
}
})
.forBrowser('electron')
.build();
it('open extension', async function(){
await driver.findElement(By.xpath(".//div[contains(@aria-label,'View')]")).click()
await driver.findElement(By.xpath("//*[text()='Command Palette...']")).click()
await driver.findElement(By.className('input')).sendKeys('extensionname')
await driver.findElement(By.xpath("//*[contains(text(),'extensionname')]")).click()
await sleep(5000)
await driver.findElement(By.xpath("//*[contains(@title,'extension title')]")).click()
var title =await driver.getTitle()
assert.equal(title,'extensiontitle')
await sleep(5000)
await driver.switchTo().frame(driver.findElement(By.tagName('iframe')))
await driver.getPageSource().then(function(tmptext){
console.log(tmptext.includes('extension web element'))
})
});
})
}
catch(ex){
console.log(ex)
}
代码应该能够找到网络驱动程序并完成测试。