selenium - Selenium quasar app 测试元素“点击”问题
问题描述
我有一个用 Quasar 制作的应用程序。我使用 firefox 使用 python selenium 进行 e2e 测试。我登录,然后想注销。要执行此操作,我通常需要单击配置文件图标以显示菜单并选择Logout
.
问题是无论我尝试过什么菜单都不会出现。代码如下所示。
@pytest.mark.nondestructive
def test_must_login_and_logout_properly(logged_in_selenium, wait):
driver = logged_in_selenium
avatar = wait.until(EC.presence_of_element_located((By.XPATH, '//header//img[@alt="Profile image"]/ancestor::button/parent::span')))
# "natively" via selenium
ActionChains(driver).pause(1).move_to_element(avatar).click().perform()
# via javascript
driver.execute_script('document.evaluate(\'//header//img[@alt="Profile image"]/ancestor::button/parent::span\', document).iterateNext().dispatchEvent(new Event("click"))')
上面的代码不起作用,直到我真的用鼠标点击了这个元素。通过将time.sleep(10)
第一行放入测试功能并单击。之后,任何方法通过avatar.click()
或execute_script(...)
工作正常。
我还可以选择使用 PyAutoGUI 在屏幕上查找头像并执行该点击,但我不喜欢这种变体。
- 更新
我发现它为什么会这样,但仍然不知道如何解决这个问题。最初(页面加载后)click
事件处理程序未附加到//header//img[@alt="Profile image"]/ancestor::button/parent::span
元素。只有在该区域手动点击后才会出现。
有任何想法吗?
解决方案
你没有分享到这个页面的链接,所以我只能猜测。
我会尝试:
- 等待元素可见性,而不仅仅是存在。
- 尝试
click
从ActionChains
行动中移除。 - 在移动到元素并单击它之间添加一个短暂的延迟。仍然不确定,但这可能会起作用
avatar = wait.until(EC.visibility_of_element_located((By.XPATH, '//header//img[@alt="Profile image"]/ancestor::button/parent::span')))
ActionChains(driver).pause(1).move_to_element(avatar).perform()
time.sleep(0.2)
avatar.click()
试试
这个:
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='q-avatar']"))).click()
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Logout']"))).click()
推荐阅读
- python - 如何在 python-curses 中启用鼠标移动事件
- c - 我正在为斐波那契数列编写代码,在第 44 个系列之后,我开始在系列中得到负值,我不知道为什么?
- c# - 一段时间后如何从循环中的数组中删除对象
- ios - 传入的推送通知设置警报两次 swift 4
- c# - 如何格式化xml对象类的值
- apache-nifi - 在 Evaluate jsonpath 处理器的 nifi usgae 中是否会因为属性创建而影响性能
- python - 你如何替换'|' 用 ' ' 或空字符串?
- javascript - form.on('submit') 不会在 form.submit() 之后而是之前触发
- c - 有没有办法在文件目录更改时使用 fopen() 读取/写入文件,但无需在实际代码中手动更改目录?
- netbeans - NetBeans 11 和编码字符