Создание динамического адреса селена в конфигурационном файле Protractor - PullRequest
0 голосов
/ 28 августа 2018

Вот простой файл конфигурации транспортира,

exports.config = {
    // The address of a running selenium server.
    'seleniumAddress': 'http://localhost:4444/wd/hub',
    // Capabilities to be passed to the webdriver instance.
    'capabilities': {
        'browserName': 'chrome'
    },

    // Options to be passed to Jasmine-node.
    'jasmineNodeOpts': {
        'showColors': true,
        'defaultTimeoutInterval': 30000
    }
};

здесь адрес селена заштрихован. Но я хочу программно передать другой адрес. Сделать что-то вроде

String URL_TEMPLATE = "https://blabla.com/GoLivePage/ExternalAPIs/" + "getSeleniumGrid.jsp?locale=%s&browser=%s&fabric=%s&teamName=%s"

String URL = String.format(URL_TEMPLATE, "US", "Firefox" , "corp", "<Your Team Name>");

Document doc = Jsoup.connect(URL).timeout(0).get();

String machineName = doc.body().text();

DesiredCapabilities capabilities=new DesiredCapabilities(DesiredCapabilities.firefox());

com.openqa.selenium.Proxy tmpProxy = new Proxy();

tmpProxy.setProxyType(org.openqa.selenium.Proxy.ProxyType.DIRECT);

capabilities.setCapability(CapabilityType.PROXY, tmpProxy);

WebDriver session = null;

try {
 session = new RemoteWebDriver(new URL("http://"+machineName+"/wd/hub"), capabilities);

А потом я хочу повторно использовать этот сеанс с чем-то вроде этого Как подключить и повторно использовать уже открытое окно браузера в Protractor

В приведенном выше ответе stackoverflow идентификатор сеанса жестко закодирован, но я хочу добавить его программно. В основном, если нужно, чтобы кто-то сказал мне, как программно делать вещи в конфигурационном файле транспортира. Я новичок во всех технологиях пользовательского интерфейса, а также в сценарии Java.

1 Ответ

0 голосов
/ 28 августа 2018

Confт файл Protractor предоставляет только один интерфейс: getMultiCapabilities, чтобы мы могли динамически указывать адрес seleniumAddress. Подробнее на здесь

Мы можем указать seleniumAddress вне любого блока capabilities, такой адрес является глобальным значением для всех capabilites. Кроме того, мы можем указать seleniumAddress внутри capabilites блока, который будет перезаписывать глобальный.

Мы используем getMultiCapabilities, возвращаем обещание, конечным значением которого является массив capabilities. И мы указываем seleniumAddress внутри capabilities.

exports.config = {

    seleniumAdress: '.......' 
    // this address is the global value for all capabilites
    // we can specify it inside capabilites to overwrite the global
    // value, so you can comment the global value.

    specs: [],

    getMultiCapabilities: function() {
        const request = require('request-promise');
        const util = require('util');

        const url_tmplate = "https://blabla.com/GoLivePage/ExternalAPIs/getSeleniumGrid.jsp?" + 
            "locale=%s&browser=%s&fabric=%s&teamName=%s"

        let url = util.format(utl_template, "US", "Firefox" , "corp", "<Your Team Name>");

        return request.get(url).then(function(body){
            // adjustment below line to extract machineName from response
            let machineName = body;

            return [
                {                 
                    browserName: 'chrome',
                    seleniumAddress: "http://"+machineName+"/wd/hub"
                }
            ];
        })
        catch(function(err){
            console.log('get selenium server name fail: ' + err);
        });
    },
    // specify getMultiCapabilities in conf.js, 
    // capabilities and multiCapabilities in conf.js will be ignored.
    ...

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...