不知道如何使用 selenium / Java (openjdk 11 2018-09-25) 處理這個輸入文本欄位元素。
我嘗試了 xpath、cssSelector 等,但它從來沒有用過。它總是“無法找到元素”。
<slot name="input">
<input part="value" tabindex="0" aria-labelledby="vaadin-text-field-input-3">
</slot>
這不起作用:
driver.findElement(By.xpath("//input[@aria-labelledby='vaadin-text-field-input-3']")).sendKeys("test");
有解決方案嗎?
uj5u.com熱心網友回復:
要將字符序列發送到您需要為elementToBeClickable()誘導WebDriverWait的元素,您可以使用以下任一定位器策略:
- css_selector:
new WebDriverWait(driver, 20)
.until(ExpectedConditions.elementToBeClickable(
By.cssSelector("div.vaadin-text-field-container div[part=input-field][id^='vaadin-text-field-input'] slot[name='input'] > input[part='value'][aria-labelledby^='vaadin-text-field-input']")
)).sendKeys("pixelhead");
- 路徑:
new WebDriverWait(driver, 20)
.until(ExpectedConditions.elementToBeClickable(
By.xpath("//div[@class='vaadin-text-field-container']//div[@part='input-field' and starts-with(@id, 'vaadin-text-field-input')]//slot[@name='input']/input[@part='value' and starts-with(@aria-labelledby, 'vaadin-text-field-input')]")
)).sendKeys("pixelhead");
uj5u.com熱心網友回復:
Xpath:
//div[@class='vaadin-text-field-container']//descendant::input[@part='value' and starts-with(@aria-labelledby, 'vaadin-text-field-input')]
如果我們有獨特的條目,請檢查dev tools(谷歌瀏覽器)。HTML DOM
檢查步驟:
Press F12 in Chrome-> 轉到element部分 -> 執行CTRL F-> 然后粘貼xpath并查看,如果您想要element的是否使用匹配節點突出顯示。1/1
如果這是唯一的//div[@class='vaadin-text-field-container']//descendant::input[@part='value' and starts-with(@aria-labelledby, 'vaadin-text-field-input')],那么您還需要檢查以下條件。
檢查它是否在任何
iframe/frame/frameset.解決方法:先切換到iframe/frame/frameset,再與這個web元素互動。
檢查它是否在任何
shadow-root.解決方法:使用
driver.execute_script('return document.querySelector回傳一個web元素,然后進行相應操作。確保在與元素互動之前正確呈現元素。放一些
hardcoded delay或Explicit wait再試一次。解決方案:
time.sleep(5)或WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='vaadin-text-field-container']//descendant::input[@part='value' and starts-with(@aria-labelledby, 'vaadin-text-field-input')]"))).send_keys("test")如果您已重定向到 a
new tab/ or new windows并且您沒有切換到該特定new tab/new window的 ,否則您可能會遇到NoSuchElement例外。解決方法:先切換到相關的視窗/標簽。
如果您已切換到 iframe 并且新的所需元素不在同一個 iframe 背景關系中,則首先
switch to default content與它進行互動。解決方案:切換到默認內容,然后切換到相應的 iframe。
您可以從 step1 開始除錯。
更新:
針對問題的具體解決方案:
Thread.sleep(2000);
WebElement inputButton = (WebElement) ((JavascriptExecutor)driver).executeScript("return document.querySelector('#TextFieldTitle').shadowRoot.querySelector('#vaadin-text-field-input-3 > slot:nth-child(2) > input')");
inputButton.sendKeys("test");
代替paste query selector here你將不得不按 F12 再次在 goog chrome 中轉到開發工具,然后
- 進入那個輸入框
- 右鍵單擊
- 選擇副本
- 選擇復制JS路徑。
- Ctrl v 進入記事本,看看你從開發工具中得到了什么。
它會是這樣的:
document.querySelector("#vaadin-text-field-input-3 > slot:nth-child(2) > input")
paste query selector here用包裹在里面的東西 替換它""
uj5u.com熱心網友回復:
根據提供的html,這有效:
driver.find_element(By.XPATH, "//input[@part='value' and contains(@aria-labelledby, 'vaadin-text-field-input')]"]
x = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@part='value' and contains(@aria-labelledby, 'vaadin-text-field-input')]")))
x.send_keys('This is typed here by selenium')
print(f"the typed text in input box is: {x.get_attribute('value')}")
輸出:
the typed text in input box is: This is typed here by selenium
Process finished with exit code 0
uj5u.com熱心網友回復:
看起來 HTML 的一部分看起來像:
<div class="vaadin-text-field-container">
<label part="label" id="vaadin-text-field-label-3"></label>
<div part="input-field" id="vaadin-text-field-input-3">
<slot name="prefix"></slot>
<slot name="input">
<input part="value" tabindex="0" aria-labelledby="vaadin-text-field-input-3">
</slot>
</div>
</div>
更好的是從一些 id 欄位構建您的 XPATH 定位器:
//div[@id='vaadin-text-field-input-3']//輸入[包含(@aria-labelledby, 'vaadin-text-field-input')]"]
此外,如前所述,必須檢查:
- 如果它對于這個頁面是唯一的
- 如果
input元素不是動態的
如果您發現該注釋已解決,您可以移至代碼部分并將創建的定位器與 WebDriver 一起使用:
driver.findElement(
By.xpath("//div[@id='vaadin-text-field-input-3']//input[contains(@aria-labelledby, 'vaadin-text-field-input-3')]"]"
)).sendKeys("test");
另外,請記住,您必須知道該元素已加載到頁面上。正如之前建議的那樣,您可以使用一些顯式等待您的元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444121.html
