Как я могу использовать поле идентификатора, которое является динамическим при запуске JavascriptExecutor с getElementById - PullRequest
0 голосов
/ 19 июня 2019

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

Я могу ввести текст и увидеть результаты на экране, но мой Javascript для вывода текста не работает, так как поле идентификатора, которое я использую, является динамическим.

Я пытаюсь отобразить текст в консоли браузера, чтобы использовать его в своем Javascript. Если я попробую по идентификатору, но использую динамически назначенный идентификатор, тогда я получу соответствующий возврат, однако в следующий раз, когда страница обновится, этот идентификатор больше не будет действительным.

HTML выглядит следующим образом:

<input 
    type="text" 
    id="origin-29890" 
    name="origin" 
    class="ej-input origin ui-autocomplete-input" 
    required="" 
    aria-label="From Airport" 
    data-routesearch-placeholder="e.g. London Gatwick" 
    aria-describedby="route-search-origin-description" 
    aria-autocomplete="list" 
    aria-expanded="false" 
    autocomplete="off" 
    aria-owns="ui-id-1" 
    placeholder="e.g. London Gatwick" 
    aria-activedescendant="selected-autocomplete-item">

Если я попытаюсь использовать вместо этого getElementsByClassName, то при запуске этого в консоли браузера я не получаю то, что ищу;

"f values() { [native code] }

Если бы поле было статическим, то сработало бы следующее

String script = "return document.getElementById(\"origin\").value";
String text= (String) jse.executeScript(script);
System.out.println(text);

Я ищу способ изменения строки возвращаемого документа для использования динамического идентификатора или же, чтобы скрипт принимал Xpath, чтобы я мог включить начало с тега

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Вы можете найти элемент, используя XPath-локатор , например:

WebElement myInput = driver.findElement(By.xpath("//input[@name='origin']"));

Как только вы закончите, вы можете получить его id атрибут :

System.out.println(myInput.getAttribute("id"));

или, если хотите, вы можете получить атрибут value через JavaScriptExecutor , например:

 System.out.println(driver.executeScript("return [0].value", myInput));
1 голос
/ 19 июня 2019

Я думаю, вы можете найти его по имени.Пожалуйста, попробуйте это:

String script = "return document.getElementsByName(\"origin\").value";
...