Транспортир: получить значение привязки с помощью xpath

Если у меня есть такой html:

<body>
    <div id="menu">
       <div id="button"> {{ someBinding }} </div>
    </div>
</body>

и у меня есть такое утверждение в транспортире:

ptor.findElement(By.xpath("/body/div[@id='menu']/div[@id='button']"));

Что бы я использовал, чтобы получить значение {{someBinding}}? Кажется, что транспортир пытается сравнить значение с именем привязки. Поэтому, если я ожидаю, что {{someBinding}} скажет "Hello World", выдается ошибка, говорящая, что

Expected: {{someBinding}} to equal 'Hello World'

person xv47    schedule 18.04.2014    source источник


Ответы (3)


Я думаю, вам нужно вызвать .getText() для элемента.

el = ptor.findElement(By.xpath("/body/div[@id='menu']/div[@id='button']"))

так что все ваше утверждение будет:

expect(el.getText()).toBe('Hello World');

Я бы также рассмотрел возможность использования другого локатора, такого как локатор CSS, если вы используете идентификаторы, или взгляните на локатор привязки.

https://github.com/angular/protractor/blob/master/docs/api.md#webdriverwebelementprototypegettext https://github.com/angular/protractor/blob/master/docs/api.md#protractorbyprototypebinding

person rjferguson21    schedule 18.04.2014
comment
element.getText() выдает ошибку, поэтому я удаляю метод getText(), и он запускается, но я получаю ту же ошибку, о которой упоминал выше. Для моего текущего проекта метод xpath является единственным локатором, который успешно извлекает мое сообщение. - person xv47; 19.04.2014
comment
Я обновил свой ответ, чтобы попытаться быть более ясным, вам нужно вызвать .getText() в результате оператора findElement. - person rjferguson21; 19.04.2014

Я нашел решение, если кто-то еще его ищет. В дополнение к ответу @rjferguson21 строка ожидания должна выглядеть так:

expect(el.evaluate("someBinding")).toBe("Hello World");

Я думаю, что это было обновление в Protractor.

person xv47    schedule 21.04.2014
comment
я знаю, что это немного устарело, поэтому, возможно, что-то изменилось, но для меня это не сработало, мне пришлось сначала разрешить обещание, не уверен, почему, как обычно, ожидают автоматического разрешения, но на случай, если кто-то в будущем борется с этим , я думал, что я запишу свой опыт. поэтому, чтобы уточнить, я должен был сделать это; el.evaluate("someBinding").then(function(bindingValue){ expect(bindingValue).toBe("Hello World)}); - person Sirk; 20.10.2014

Обратите внимание, что для этого вам не нужно использовать выбор xpath. Попробуйте binding локатор:

var el = element(By.binding('someBinding'));
expect(el.getText()).toBe('Hello World');
person fracz    schedule 31.10.2015