我正在处理什么
在我的一项测试中,我需要与一个弹出输入字段进行交互,使用常规 css 选择器或 xpath 很难选择该输入字段。不过,我知道这个弹出框将具有焦点。
如何利用它的焦点这一事实来正确断言输入字段包含一些文本?
我正在寻找的伪代码:
element = driver.find_element_by_FIND_THE_ELEMENT_WITH_FOCUS
assert elem.text == "foobar"
我遇到的部分解决方案:
Possibly a working solution in Ruby:
element = @driver.find_element :css, 'input:focus'
sleep(3)
element.send_keys "Hello WebDriver!"
assert_equal(element.attribute('value'),"Hello WebDriver!")
Getting the focused element with jQuery:
var focus = $(document.activeElement);
您能提供一个python解决方案吗?
编辑:
这是该元素的 HTML:
<div class="css-1492t68">Select a speaker...</div>
我意识到我的问题可能会导致一些困惑,因为元素本身没有语义 <input>
标签而是一个 <div>
。我想这是由 quill-editor
处理的库,我们的开发团队在设计此应用程序时使用了该库。
这是弹出框的屏幕截图:
最佳答案
由于元素没有一致的 CSS 类,因此使用 XPath 表达式可能是您的最佳选择。
您需要通过匹配 <div>
来等待元素可点击(这意味着难以处理)包含预期的文本,并具有以 css-
开头的 CSS 类。这样做应该允许 JavaScript 有足够的时间在浏览器中执行其操作以初始化鹅毛笔编辑器并显示它:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ExpectedConditions
xpath = "//div[starts-with(@class, 'css-')][contains(., 'The text you expect to find')]"
expected_condition = ExpectedConditions.element_to_be_clickable((By.XPATH, xpath))
element = WebDriverWait(driver, 20).until(expected_condition)
如果此弹出字段直接位于特定父元素内,您可以相应地进一步限制您的 xpath 表达式。
如果成功,则不会抛出任何错误。如果不成功,它应该抛出 WebDriverTimeoutException(或者在 Python 中调用此错误的任何内容)。
关于python - 选择 Selenium 中的焦点元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55533942/