CodeceptJS icon indicating copy to clipboard operation
CodeceptJS copied to clipboard

Porting pure webdriver based test to CodeceptJs test adds URL encoding

Open pamoller opened this issue 4 years ago • 0 comments

What are you trying to achieve?

call this url by selenium via webdriver:

https://host.docker.internal:8000/payroll/#company/1-250|project|projectViewState/{%22type%22:%22event%22,%22date_range%22:%221%20WEEK%22,%22eventid%22:1,%22eventdb%22:250,%22regularcheckin%22:true}|listViewOpen/2-250

What do you get instead?

but this got sent instead (|, { and } are got encoded):

https://host.docker.internal:8000/payroll/#company/1-250%7Cproject%7CprojectViewState/%7B%22type%22:%22event%22,%22date_range%22:%221%20WEEK%22,%22eventid%22:1,%22eventdb%22:250,%22regularcheckin%22:true%7D%7ClistViewOpen/2-250

Provide test source code if related

Scenario('change the company', async ({ I }) => {
    I.amOnPage('https://host.docker.internal:8000/payroll/#company/1-250|project|projectViewState/{%22type%22:%22event%22,%22date_range%22:%221%20WEEK%22,%22eventid%22:1,%22eventdb%22:250,%22regularcheckin%22:true}|listViewOpen/2-250');
    let url = await I.grabCurrentUrl();
    console.log(`Current URL is [${url}]`);
})```

the original test works well 

````js
// Generated by Selenium IDE
const { Builder, By, Key, until} = require('selenium-webdriver')
const  chrome  = require('selenium-webdriver/chrome')
const  logging  = require('selenium-webdriver/lib/logging')
const assert = require('assert')
const BASEURL = 'https://host.docker.internal:8000/payroll/';

describe('Payroll', function() {
  this.timeout(30000)
  let driver
  let options
  beforeEach(async function() {
    builder = new Builder();
    options = (new chrome.Options()).setAcceptInsecureCerts(true);
    prefs = new logging.Preferences();
    prefs.setLevel(logging.Type.BROWSER, logging.Level.ALL);
    options.setLoggingPrefs(prefs);
    driver = await builder.forBrowser('chrome').usingServer('http://localhost:4444/wd/hub').setChromeOptions(options).build()
    vars = {}
  })
  afterEach(async function() {
    //await driver.manage().logs().get(logging.Type.BROWSER).then((logs) => console.log(logs))
    await driver.takeScreenshot().then((image) => require('fs').writeFileSync('captured_image_3.png', image, 'base64'));   
    await driver.quit();
  })

  async function openBrowser(driver, url) {
    await driver.get(BASEURL + url);
    let username = await driver.wait(until.elementLocated(By.id("login-username-inputEl")));
    username.sendKeys("arthur");
    let password = await driver.wait(until.elementLocated(By.id("login-password-inputEl")));
    password.sendKeys("hwzsyx5h$");
    let loginButton =  await driver.wait(until.elementLocated(By.id("login-button")));
    loginButton.click();
    await driver.manage().window().setRect(1924, 768) 
  }

  it('open and save the contract editor', async function() {
  await openBrowser(driver, "#company/1-250|project|projectViewState/{%22type%22:%22event%22,%22date_range%22:%221%20WEEK%22,%22eventid%22:1,%22eventdb%22:250,%22regularcheckin%22:true}|listViewOpen/2-250")
  await driver.wait(until.elementLocated(By.id("firstname-inputEl")), NaN)
  await driver.findElement(By.id("open-editor")).click()
  await driver.findElement(By.id("overtimeunitAsMinutes-inputEl")).click()
  await driver.findElement(By.id("overtimeunitAsMinutes-inputEl")).sendKeys("30")
  await driver.findElement(By.id("save-editor")).click()
})

})

Details

  • CodeceptJS version: 3.13
  • NodeJS Version:16.9.1
  • Operating System: WSL Ubuntu 20
  • webdriverio: 6.12.1
  • Configuration file: ?
exports.config = {
  tests: './tests/acceptance/codeceptjs/*.co.js',
  output: './output',
  helpers: {
    WebDriver: {
      url: 'https://localhost',
      browser: 'chrome',
      host: '127.0.0.1',
      port: 4444,
      restart: true,
      windowSize: '1920x1680',
      smartWait: 5000,
      desiredCapabilities: {
        chromeOptions: {
          args: [ /*"--headless",*/ "--disable-gpu", "--no-sandbox", "--ignore-certificate-errors" ]
        }
      }
    }
  },
  include: {
    I: './steps_file.js'
  },
  bootstrap: null,
  mocha: {},
  name: 'payroll',
  plugins: {
    pauseOnFail: {},
    retryFailedStep: {
      enabled: true
    },
    tryTo: {
      enabled: true
    },
    screenshotOnFail: {
      enabled: true
    }
  }
}```

pamoller avatar Oct 11 '21 12:10 pamoller