使用getElementById运行JavascriptExecutor时如何使用动态的ID字段

时间:2019-06-19 11:02:37

标签: java selenium xpath css-selectors webdriverwait

我正在尝试运行一个硒脚本,该脚本将在用户输入动态搜索字段后返回屏幕上显示的文本。

我能够输入文本并在屏幕上看到结果,但是由于正在使用的ID字段是动态的,所以我的Javascript输出文本无效。

我试图使文本显示在浏览器控制台中,以便可以在Javascript中使用它。如果我按ID尝试但使用了动态分配的ID,那么我会得到适当的回报,但是,下一次页面刷新时,该ID将不再有效。

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);

我正在寻找一种更改返回文档行以使用动态ID或显示的方式使脚本接受Xpath的方式,以便我可以添加一个带有标签的开头

2 个答案:

答案 0 :(得分:1)

我想您可以按名称找到它。请尝试以下方法:

"include": [
    "src/config/*.json"
]

答案 1 :(得分:1)

您可以使用XPath locator来定位元素,例如:

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

完成后,您可以获取其id attribute

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

或者,如果需要,您可以通过value attribute来获得JavaScriptExecutor,例如:

 System.out.println(driver.executeScript("return [0].value", myInput));