gpt4 book ai didi

javascript - Selenium - 使用 NodeJS 中的 selenium-webdriver 库与现有浏览器 session 交互

转载 作者:行者123 更新时间:2023-11-29 10:58:27 24 4
gpt4 key购买 nike

http://tarunlalwani.com/post/reusing-existing-browser-session-selenium/

这篇文章提供了将现有 session 用于 selenium 的见解,但这是在 Python/Java 中。想使用 selenium-webdriver 库在 NodeJS 中实现相同的逻辑。

我可以使用以下方式访问 session ID:

    driver.getSession().then( function(session) {
console.log('Session:'+session.getId());
});

但是如何获取executor值呢?

检查并发现 webdriver.WebDriver.attachToSession 方法将附加到现有 session ,但需要 executor 和 session 的值相同。

最佳答案

可以使用 Node 附加到现有的 webdriver session

您只需要手动创建 WebDriver 对象,无需构建器。

const _http = require('selenium-webdriver/http');

//todo: replace with your session ID and selenium url
let sessionId = 'cddab287623789c665c1dbc5c64bf702';
let url = 'http://localhost:4444/wd/hub';

let driver = new WebDriver(
sessionId,
new _http.Executor(Promise.resolve(url)
.then(
url => new _http.HttpClient(url, null, null))
)
);

更复杂的示例:测试将尝试使用现有 session ,如果它不起作用 - 将创建一个新 session 。

const {Builder, By, Key, until, WebDriver} = require('selenium-webdriver');
const _http = require('selenium-webdriver/http');

(async function example() {
//todo: replace this value with session ID after test is executed first time
let sessionId = 'cddab287623789c665c1dbc5c64bf702';
let url = 'http://localhost:4444/wd/hub';
let browser = 'chrome';
let startUrl = 'http://www.google.com/ncr';

//Connect to existing session
let driver = await new WebDriver(
sessionId,
new _http.Executor(Promise.resolve(url)
.then(
url => new _http.HttpClient(url, null, null))
)
);

//Trying to open URL. If does not work - we need to re-create a session
await driver.get(startUrl).catch(async r => {
console.log('Session "' + sessionId + '" not found. Creating new session.');
driver = await new Builder()
.usingServer(url)
.forBrowser(browser)
.build();
driver.getSession().then(function(e){
console.log('Session: ' + JSON.stringify(e, null, 2));
});
driver.get(startUrl);
});

console.log('Starting test execution');

try {
await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
await driver.wait(until.titleIs('webdriver - Google Search'), 1000);
} finally {
//todo: We intentionally do not close the session in order to use it next time
// await driver.quit();
}
})();

关于javascript - Selenium - 使用 NodeJS 中的 selenium-webdriver 库与现有浏览器 session 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com