我不能点击一个元素,因为下拉菜单模糊了所有其他元素。
在Visual中使用Selenium,我尝试构建一个测试用例,首先单击下拉菜单中的复选框,然后单击下拉菜单之外的另一个元素。但是,在单击第一个复选框后,下拉菜单本身不会关闭。
如果你在网页浏览器上手动关闭这个下拉菜单,你只需要点击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中不起作用,但它只使用命令click并将//div[3]/div[3]设置为目标,就可以在Selenium IDE中工作。
我尝试使用IDE中的select函数来识别下拉菜单中没有包含的其他元素。我也试过用萤火虫。但是这是唯一可以在下拉菜单之外点击的元素。
概括地说:
//div[3]/div[3]即下拉列表之外的内容,而在Selenium中可以这样做呢?发布于 2019-04-12 12:25:55
在这种情况下,解决方案是单击隐藏页面其余部分的元素:
driver.FindElement(By.CssSelector(".cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing")).Click();当我这么做的时候,下拉列表就关闭了。
注意:为了能够识别元素,我必须使用CSSSelector的另一种格式。
在前面收到的错误消息中,由Visual编写的模糊元素如下所示:
cdk-overlay-backdrop cdk-overlay-transparent-backdrop cdk-overlay-backdrop-showing但是我不能仅仅把它复制到一个CSSSelector中,似乎总是需要添加一个“”。在CSSSelector Id的开头,并将元素名称中的任何空格替换为“”。
如下所示:
.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing发布于 2019-04-04 12:58:41
我总是尝试通过使用xpath或css直接选择列表项来选择列表项,而不是单击列表框并选择。这样我们就可以忽略这个麻烦,而且它也会更快。如何做到:
driver.FindElement(By.Xpath("//select[@attribute='attributeValue']/li[@attribute='attributeValue'])).click这是Javascript方法。参考以下2链接https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
// if you want to click on element
IWebElement element = driver.FindElement(By.CssSelector("your css locator goes here"))
// if you want to return value from javascript and store
string title = (string)js.ExecuteScript("return document.title");如果您想隐藏模糊元素,下面是使用js的逻辑。
element = driver.FindElement(By.Xpath("//div[@class='cdk-overlay-backdrop cdk-overlay-transparent-backdrop cdk-overlay-backdrop-showing']")); // this is the obscuring element in your case.
js.ExecuteScript("arguments[0].setAttribute("style","display: none;");",element);https://stackoverflow.com/questions/55516140
复制相似问题