Protractor - get browser title as string

2019-05-16 07:14发布

I'd like to store initial device title, which is accessible via GUI in browser as page title, and reuse it later in the code. E.g. I want to change name of device if it is set to some particular name only, and to store an old device name in browser console log. Code might look like this:

    var some_name = 'Some Name';
    var title = browser.getTitle();
    console.log(title);
    if (title.equals('Some Name')){
    some_name = 'Some Other Name';
    }
    setDeviceName(some_name);

unfortunately, to that protractor responds with

    TypeError: title.equals is not a function

How is it possible to extract browser title as string? Thanks.

UPDATE:

Thanks everyone, the solution due to igniteram1 is

    var some_name = 'Some Name';
    some_name = browser.getTitle().then(function(webpagetitle){
      if (webpagetitle === 'Some Name'){
        return 'Some Other Name';
      }else{
        return 'Some Name'
      } 
    });
    expect(some_name).toEqual('Some Other Name');

5条回答
干净又极端
2楼-- · 2019-05-16 07:29

In protractor whatever information you need from browser will be a promise and not a string. in order to fetch the value you need to resolve the promise. look at the below example.

 var title = browser.getTitle();
 title.then(function(webpagetitle){
    if (webpagetitle == 'Some Name'){
      some_name = 'Some Other Name';
    }
})
查看更多
趁早两清
3楼-- · 2019-05-16 07:31

If you aware of the new asyc/await you may use:

expect(await browser.getTitle()).toEqual("myCustomTitle");

查看更多
霸刀☆藐视天下
4楼-- · 2019-05-16 07:42

I've got a simple function in protractor to get the title when in the promise it shows the title properly, but when I do console.log it gives :

Title Got is ManagedPromise::123 {[[PromiseStatus]]: "pending"}

describe('Protractor Demo App', function() {
it('should have a title', function(one) {
    browser.waitForAngularEnabled(false);
  browser.get('https://tasyah.com');

  titleGot = browser.getTitle().then(function(promisedResult){
      console.log("Title is : " + promisedResult);
      return promisedResult;

  })
  console.log("Title Got is " + titleGot);
  expect(titleGot).toEqual('Tasyah: Online Shopping For Fashion And Costume Jewellery');
  console.log("Title Got is " + titleGot);

});

});

Any explanation on this is appreciated...

Thanks Naveen

查看更多
女痞
5楼-- · 2019-05-16 07:45

.equals() is not a function in JavaScript, but it's a valid function in Java. In Java Script, we have '==', '===' as an alternative for performing equal operations.

var x=10

== compare only values of operands, not type of operands

example:

x==10 => true

x=="10" => true

=== compare both values and type of operands

example:

x===10 => true

x==="10" => false(type of x in int and "10" is string)

  var someName;
  browser.getTitle().then(function (webPageTitle) {
    if (webPageTitle == 'Some Name'){
        someName= 'Some Other Name';
       }
    });
查看更多
萌系小妹纸
6楼-- · 2019-05-16 07:48

In addition to @Sudharshan Selvraj's answer,its good practice to use strict equality === instead of == and to return the value.

var some_name = 'Some Name';
some_name = browser.getTitle().then(function(webpagetitle){
  if (webpagetitle === 'Some Name'){
    return 'Some Other Name';
  }else{
    return 'Some Name';
  }
 });
expect(some_name).toEqual('Some Other Name'); 
查看更多
登录 后发表回答