Получение атрибута через XPath Query успешно в браузере, но не в рамках робота

StackOverflow https://stackoverflow.com//questions/23012376

Вопрос

У меня есть определенный XPath-запрос, который я использую, чтобы получить высоту с определенного HTML-элемента, который отлично возвращает меня желаемое значение, когда я выполняю его в Chrome через Hatch Helper-Plugin.

//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
.

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

Get Element Attribute//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
.

... Тогда я получил инвалидную секцию SELECTORECEXCECTION об этом XPath.

InvalidSelectorException: Message: u'invalid selector: Unable to locate an 
element with the xpath expression `//*/div[@class="BarChart"]/*[name()="svg"]/*
[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/`
.

Итак, робот Framework или Selenium удалили @ -sign и все после него.Я думал, что это был побег --Проблем и добавил и удалил несколько косой перед @height, но не удалось.Я также пытался инкапсулировать результат этого запроса в строке () - команду, но это было также неудачно.

У кого-то есть идея предотвратить сломание моего XPath-запроса?

Это было полезно?

Решение

Похоже, вы не можете включить ось атрибута в сам XPath, когда вы используете робот.Вы должны получить элемент на XPath, а затем указать имя атрибута за пределами этого.Похоже, синтаксис что-то подобное:

 Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])@height 
.

или, возможно, (я никогда не использовал робот):

 Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])[1]@height 
.

Эта документация говорит

ATTRETUTE_LOCATOR состоит из локатора элемента, за которым следует знак @ имя и именем атрибута, например "remuction_id @ class".

Так что я думаю, что я опубликовал выше, находится на правильном пути.

Другие советы

Вы правильно в своем наблюдении, что ключевое слово, кажется, удаляет все после окончательного генеракодицетагкода.Более правильно, он использует @ для отделения локатора элемента из имени атрибута и делает это путем разделения строки на этот конечный символ Renacodicetacode.

Никакого количества сбежания не решит проблему, поскольку код не делает ни одного анализа в этой точке.Это точный код (как в этом написании ...), который выполняет эту операцию:

def _parse_attribute_locator(self, attribute_locator):
    parts = attribute_locator.rpartition('@')
    ...
.

Простое решение - отбросить эту заднюю косулью, поэтому ваш XPath будет выглядеть так:

//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top