在硒中选择聚焦元素

时间:2019-04-05 11:00:46

标签: python selenium

我正在处理的事情

在我的一项测试中,我需要与一个很难使用常规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库处理的,我们的开发团队在设计此应用程序时使用了该库。

这是弹出框的屏幕截图:

Screenshot of the pop-up

2 个答案:

答案 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