如何在格式化的xpath中使用撇号?

时间:2018-07-02 07:56:46

标签: java selenium-webdriver xpath string-formatting qaf

我已将定位器放在属性文件中,如:

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 :(得分:3)

在XPath 1.0中,可以使用单引号或双引号来分隔字符串文字,并且可以使用其他类型的引号在字符串中表示自身。您不能同时包含单引号和双引号的字符串文字,但是可以使用concat()来解决此限制:

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

如果XPath表达式出现在施加自身约束的宿主语言中,则情况将变得复杂;在这种情况下,必须使用宿主语言约定对XPath表达式中的所有引号进行转义,例如Java中的\",XML中的"

答案 1 :(得分:1)

以下几种对我有用的方法:

属性文件中的定位符:

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";
...