问题描述
我无法单击某个元素,因为下拉菜单遮挡了所有其他元素。
在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
总结:
请告诉我我发送"Esc"的代码是否错误。
为什么Visual Studio无法识别并单击
//div[3]/div[3]
(即在下拉列表之外),而它可以在Selify IDE中进行识别和单击?是否有其他关闭下拉菜单的方法?
我读到过,您总是可以点击使用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
这篇关于如何关闭永久元素以遮挡其他元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!