t.me/atinfo_chat Telegram группа по автоматизации тестирования

Проблема с русскими локаторами в интерактивном режиме


(astafev) #1

Проблема, как я понимаю, с кодировкой.

Вот что я набираю:

cmd=type&1=//td[contains(text(),'Пароль')]/following-sibling::td/input&2=a9e078c

Вот что получаю:

13:38:07.676 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=type&1=//td[contains(text(),'Пароль')]/following-sibling::td/input&2=a9e078
c&sessionId=8f3b58a2e5134cc48c1777f96cd7daab
13:38:07.676 INFO - Command request: type[//td[contains(text(),'??????')]/follow
ing-sibling::td/input, a9e078c] on session 8f3b58a2e5134cc48c1777f96cd7daab
13:38:08.911 INFO - Got result: ERROR: Element //td[contains(text(),'??????')]/f
ollowing-sibling::td/input not found on session 8f3b58a2e5134cc48c1777f96cd7daab

Кто-нибудь знает как это решить? -htmlsuite с такими командами, он выполняет нормально.


(d3unka) #2

Если вам нужно проверить работоспособность локатора, то почему бы это не сделать в Selenium IDE или при помощи плагина Xpather, FirePath?

По поводу консоли, попробуйте перенастроить OS на поддержку русских шрифтов. 


(Mykhailo Poliarush) #3

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

другим может быть использовать percent-encoding, так как это строка для выполнения через HTTP запрос, вот можно воспользоваться конвертором http://www.motobit.com/util/url-encoder.asp


(astafev) #4

Насчет локатора без русских символов: конечно, можно, но всякие id/name у нас определяются динамически, и по-моему просто логично что он вводит логин в поле, следующее за надписью "Логин"

Воспользовался percent-encoding, но это не помогло:

cmd=type&1=//td[contains(text(),'%D0%9B%D0%BE%D0%B3%D0%B8%D0%BD')]/following-sib
ling::td/input&2=1
18:54:10.200 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=type&1=//td[contains(text(),'%D0%9B%D0%BE%D0%B3%D0%B8%D0%BD')]/following-si
bling::td/input&2=1&sessionId=0bd79358e66342c1a0daa6ec8740bf5c
18:54:10.200 INFO - Command request: type[//td[contains(text(),'?юушэ')]/followi
ng-sibling::td/input, 1] on session 0bd79358e66342c1a0daa6ec8740bf5c
18:54:10.200 ERROR - Exception running 'type 'command on session 0bd79358e66342c
1a0daa6ec8740bf5c
java.lang.IllegalStateException: unexpected command json={command:"type",target:
"//td[contains(text(),\'?о??н\')]/following-sibling::td/input",value:"1"} in pla
ce before new command type could be added
        at org.openqa.selenium.server.CommandQueue.doCommandWithoutWaitingForARe
sponse(CommandQueue.java:125)
        at org.openqa.selenium.server.CommandQueue.doCommand(CommandQueue.java:1
02)
        at org.openqa.selenium.server.FrameGroupCommandQueueSet.doCommand(FrameG
roupCommandQueueSet.java:435)
        at org.openqa.selenium.server.commands.SeleniumCoreCommand.execute(Selen
iumCoreCommand.java:38)
        at org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand(Se
leniumDriverResourceHandler.java:611)
        at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleComman
dRequest(SeleniumDriverResourceHandler.java:405)
        at org.openqa.selenium.server.SeleniumDriverResourceHandler.handle(Selen
iumDriverResourceHandler.java:149)
        at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1530)
        at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1482)
        at org.openqa.jetty.http.HttpServer.service(HttpServer.java:909)
        at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820)

        at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:9
86)
        at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837)
        at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.
java:243)
        at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:357)
        at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
18:54:10.215 INFO - Got result: ERROR Server Exception: unexpected command json=
{command:"type",target:"//td[contains(text(),\'?о??н\')]/following-sibling::td/i
nput",value:"1"} in place before new command type could be added on session 0bd7
9358e66342c1a0daa6ec8740bf5c


(astafev) #5

Консоль-то вроде русские шрифты поддерживает (я это делаю командой chcp 1251).

Локаторы рабочие, ведь не в интерактином режиме тесты работают.

А раз уж вы заговорили по поводу плагинов. Не подскажете какие-нибудь аналоги для других браузеров (не Firefox), которые бы показывали/подсвечивали элементы по введенным XPath локаторам?


(Mykhailo Poliarush) #6

для chrome я пользуюсь XPath Helper https://chrome.google.com/webstore/detail/hgimnogjllphhhkhlmebbmlgjoejdpjl


(Mykhailo Poliarush) #7

1. можно написать относительный xpath даже по дин. ген. именнам с регулярным выражением

2. проблема с кодировкой, тяжело так разбираться, потому наверное не помогу, тем более что меня работает с русскими символами