在我的一项测试中,我需要与一个很难使用常规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
库处理的,我们的开发团队在设计此应用程序时使用了该库。
这是弹出框的屏幕截图:
答案 0 :(得分:2)
由于该元素没有统一的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中调用此错误)。
答案 1 :(得分:0)
使用:
elem = driver.switch_to.active_element