如何关闭永久元素以遮挡其他元素?

How to close a permanent element obscuring other elements?(如何关闭永久元素以遮挡其他元素?)
本文介绍了如何关闭永久元素以遮挡其他元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法单击某个元素,因为下拉菜单遮挡了所有其他元素。

在Visual Studio中使用Selify,我正在尝试构建一个测试用例,在该测试用例中,首先单击下拉菜单中的一个复选框,然后单击该下拉菜单外的另一个元素。但是,在您单击第一个复选框后,下拉菜单不会自动关闭。 如果您在Web浏览器上手动关闭此下拉菜单,您只需按Esc键或只需单击下拉菜单之外的某个位置。但当我尝试将其自动化时,它不起作用。

我尝试在脚本中按Esc-键:

Actions action = new Actions(driver);
action.SendKeys(OpenQA.Selenium.Keys.Escape);

但它不起作用。它不会发送有关发送Esc-Key的错误,而是在尝试单击被遮挡的元素时在下一行发送超时:

OpenQA.Selenium.ElementClickInterceptedException : Element <div class="mat-radio-outer-circle"> is not clickable at point (116,608) because another element <div class="cdk-overlay-backdrop cdk-overlay-transparent-backdrop cdk-overlay-backdrop-showing"> obscures it

我还尝试不发送Esc-键,而是在下拉菜单外单击,如下所示:

wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[3]/div[3]"))).Click();

这在Visual Studio中不起作用,但在Selify IDE中确实起作用,只需使用命令Click并将//div[3]/div[3]设置为目标。

Selenium IDE Example

我尝试使用IDE中的SELECT函数来识别下拉菜单中未包括的其他元素。我也尝试过使用FireBug。但这是下拉菜单之外唯一可点击的元素。

Firebug view

总结:

  1. 请告诉我我发送"Esc"的代码是否错误。

  2. 为什么Visual Studio无法识别并单击//div[3]/div[3](即在下拉列表之外),而它可以在Selify IDE中进行识别和单击?

  3. 是否有其他关闭下拉菜单的方法?

  4. 我读到过,您总是可以点击使用javascript隐藏的元素,但我还没有找到C#中如何做到这一点的指南。如果你们知道怎么做,请告诉我。

推荐答案

这种情况下的解决方案是单击遮挡页面其余部分的元素:

driver.FindElement(By.CssSelector(".cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing")).Click();

当我执行此操作时,下拉菜单关闭。

注意:我必须使用CSSSelector的另一种格式才能标识该元素。

在我之前收到的错误消息中,Visual Studio将模糊元素写成这样:

cdk-overlay-backdrop cdk-overlay-transparent-backdrop cdk-overlay-backdrop-showing
但我不能简单地将其复制到CSSSelector中,似乎您总是必须添加一个"。,并将元素名称中的任何空格替换为"."

这样:

.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing

这篇关于如何关闭永久元素以遮挡其他元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)