2010-08-02 5 views
1

У меня есть проблемы с запуском метод матчей XPATH:селен XPATH соответствует методе

@Test(groups = "regression") 
@Parameters({ "baseUri", "locale" }) 
public void testShopping(String baseUri, String locale) throws Exception{ 
    session().allowNativeXpath("false"); 
    String shoppingLink = session().getAttribute("//div[@id='footernav_links']//a[matches(@href,'.*shopping.*')]/@href"); 
    LOGGER.info(shoppingLink); 
} 

бросает исключение

1:25.871 INFO - Command request: getAttribute[//div[@id='footernav_links']//a[matches(@href,'.*shopping.*')]/@href, ] on session 057af825ff224b16877a61b97b974b72 13:31:25.912 INFO - Got result: ERROR: Element //div[@id='footernav_links']//a[matches(@href,'.*shopping.*')]/ not found on session 057af825ff224b16877a61b97b974b72 13:3

Я использую FF3.6 и получил мотивацию для этого кода из статьи

how-to-use-regex-in-selenium-locators

ответ

1

Вы можете использовать contains следующим образом:

xpath=id('footernav_links')//a[contains(@href, '/shopping/')]@href 

Также / до окончательного @ не должно быть необходимым, и вы можете упростить //div[@id='footernav_links'] к id('footernav_links'), как показано выше. Обратите внимание, что вам понадобится префикс xpath=, если вы это сделаете.


В качестве альтернативы, вы можете использовать CSS локатор:

css=#footernav_links a[href*=/shopping/]@href 
+0

Благодаря ...... этот синтаксис является более компактным, и я могу повторно использовать выражение через строку substituion тоже. Сохранено несколько строк кода :-) –

1

Получил его на работу. Теперь я использую следующий синтаксис

session().allowNativeXpath("false"); 
String shoppingLink = session().getAttribute(
    "//div[@id='footernav_links']//a[matches(@href,'/shopping/')]/@href"); 
LOGGER.info(shoppingLink); 

Ссылку Я ищу имеет вид
http://mysite.com/wcs/shopping/overview?cc=gb&lc=en
Я не уверен, если это совершенно правильно, хотя.

Смежные вопросы