Как использовать апостроф в формате xpath? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть место локатора в файле свойств, как:

header.navigation.product.link = //div[contains(@class,'grid-')]//li/a[contains(.,'%s')]

и пока я использую этот локатор в моем коде -

String headerproductlink = String.format(ConfigurationManager.getBundle()
            .getString("header.navigation.category.link"), category)

А категория = женская спортивная одежда

Пока я пытаюсь найти элемент, который он не может найти. даже я пытался как Women\'s Gym Clothing, но безуспешно.

Может кто-нибудь, пожалуйста, предложить способ?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Ниже у меня работали разные способы:

Локатор в файле свойств:

another.header=xpath=//h1[contains(.,"%s")]

Java-код:

String t = "st. john\'s bay - women";
String header = String.format(getBundle().getString("another.header"), t);
CommonStep.get("https://www.jcpenney.com/g/st-johns-bay-women/N-bwo3xZ1z0nvauZ1z0nh7w");
String headerText=ElementFactory.$(header).getText();

ниже тоже отлично работало

Локатор в файле свойств:

another.header={'locator':'xpath=//h1[contains(.,"%s")]'}

Java-код:

String t = "st. john\\'s bay - women";
...

Или Локатор в файле свойств:

another.header={"locator":"xpath=//h1[contains(.,\\"%s\\")]"}

Java-код:

String t = "st. john's bay - women";
...
0 голосов
/ 02 июля 2018

В XPath 1.0 вы можете использовать одинарные кавычки или двойные кавычки для разделения строкового литерала, и вы можете использовать другие виды кавычек для представления себя в строке. Вы не можете иметь строковый литерал, содержащий как одинарные, так и двойные кавычки, но вы можете использовать concat (), чтобы обойти это ограничение:

concat('He said: "', "I won't", '"')

Ситуация усложняется, если выражение XPath появляется в языке хоста, который налагает свои собственные ограничения; в этом случае любые кавычки в выражении XPath должны быть экранированы с использованием соглашений на языке хоста, например \" в Java, " в XML.

...