python - 选择 Selenium 中的焦点元素

标签 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

最佳答案

由于元素没有一致的 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/

相关文章:

javascript - Protractor 中的 browser.getProcessedConfig

Python - 比较2个二维字典

python - 如何将 CSV 读入 Python 字典,其中每个键的值都是字典列表?

python - 如何为我控制的 DateTime 编写 sleep 函数?

JavaFX 线程卡住

javascript - 在 selenium Anchor 标签中,onclick 函数不起作用?

python - 如何使用 python 将 RAW LOAD 从 scapy 转换为 KERBEROS 表示法

python - 计算列表中重复前导整数数量的最快方法

python - find_element_by_xpath 不返回跨度类值

python - 使用 Selenium 和 Python 使用 Chromium 进行测试