Selenium . findElement . input

pixelhead

Aktives Mitglied
Hallo zusammen,

schon wieder ein findElement Problem, dieses Mal ein input Textfeld. Ich habe schon mit cssSelector und xpath probiert und es kommt immer zur Fehlermeldung "Unable to locate element".

[CODE lang="java" title="html"]<slot name="input">

<input part="value" tabindex="0" aria-labelledby="vaadin-text-field-input-3">

</slot>[/CODE]


Das hier funktionierte nicht:

[CODE lang="java" title="Selenium Script"]driver.findElement(By.xpath("//input[@aria-labelledby='vaadin-text-field-input-3']")).sendKeys("test");[/CODE]

Hat jemand eine Idee?

Vorab schon mal vielen Dank.
 
Das Problem ist wohl Shadow Root.

[CODE lang="java" title="Shadow Root"]#shadow-root (open)
<div class="vaadin-text-field-container">
[/CODE]

Es gibt kein iframe, sondern eben dieses Shadow Root. Bisher habe ich dazu noch keine richtige Info gefunden, nur ...

[CODE lang="java" title="Selenium shadow root"]driver.execute_script('return document.querySelector[/CODE]

Bisher finde ich dazu noch keine Lösung wie ich damit umgehen muss.

hat da jemand Erfahrung mit?
 
Ich habe jetzt das hier:

[CODE lang="java" title="Shadow Element"]Thread.sleep(2000);
WebElement inputTitle = (WebElement) ((JavascriptExecutor)driver).executeScript("return document.querySelector('#TextFieldTitle').shadowRoot.querySelector('#vaadin-text-field-input-3 > slot:nth-child(2) > input')");
inputTitle.sendKeys("test");[/CODE]

Und bekomme diese Exception:

"Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: Element <input> is not reachable by keyboard"

Der Cursor blinkt schon mal genau im gewünschten Feld, es eght aber nicht weiter ...
 
Endlich eine Lösung:

[CODE lang="java" title="selenium java shadow root"]Thread.sleep(2000);
WebElement inputFELD = (WebElement) ((JavascriptExecutor)driver).executeScript("return document.querySelector('#TextFELD').shadowRoot.querySelector('#vaadin-text-field-input-3 > slot:nth-child(2) > input')");
((JavascriptExecutor)driver).executeScript("arguments[0].setAttribute('value', 'Testtiteleintrag')", inputFELD);[/CODE]

An diesen Teil
[CODE lang="java" title="snippet von chrome"]return document.querySelector('#TextFELD').shadowRoot.querySelector('#vaadin-text-field-input-3 > slot:nth-child(2) > input')[/CODE]
kommt man mit dem Chrome Browser via F12 Taste und dort bis zum gewünschten Element durchkämpfen. Dort dann Rechtsklick und Copy as JS.
 

Zurück
Oben