Selenium chrome驱动程序click()方法不总是点击元素
本文关键字:元素 方法 驱动程序 chrome click Selenium | 更新日期: 2023-09-27 18:18:38
我正在用c#编写集成测试,当我在对话框内的某些元素上使用click()方法时,没有任何事情发生,我没有得到任何错误。它将单击对话框中的一些元素,而不单击其他元素。我想如果它没有正确地选择它们,那么它会抛出和异常,但它运行顺利,说测试通过,即使它从来没有真正点击按钮。该对话框是一个iframe。
我想也许它试图点击一个尚未显示或启用的按钮,所以我在click()调用之前添加了这个:
_driver.SwitchTo().Frame(_frameElement);
_wait.Until(d =>
{
var shippingInfoButton = d.FindElement(By.CssSelector("input[title ='Info']"));
return shippingInfoButton.Displayed && shippingInfoButton.Enabled;
});
var infoButton = _driver.FindElement(By.CssSelector("input[title ='Info']"));
ScrollToElement(infoButton);
infoButton.Click();
再次运行,没有抛出异常,所以我假设它已经找到了元素,并且它被显示和启用。
如果你需要更多的信息,请告诉我。由于我无法解释为什么selenium driver .click()方法不会在页面中的某些元素上触发,而不是其他元素,但我确实找到了解决方案。
使用IJavaScriptExecutor,您可以使用javascript单击元素,而不是在我的情况下,它工作。
这是运行IJavaScriptExecutor的代码,下面是我的整个方法。
//IJavaScriptExecutor
IJavaScriptExecutor js = _driver as IJavaScriptExecutor;
js.ExecuteScript("arguments[0].click();", infoButton);
//my whole method for clicking the button and returning the page object
public ShippingMethodDetailsPageObject SelectShippingMethodInfo()
{
_driver.SwitchTo().Frame(_frameElement);
_wait.Until(d =>
{
var shippingInfoButton = d.FindElement(By.CssSelector("input[title='Info']"));
return shippingInfoButton.Displayed && shippingInfoButton.Enabled;
});
var infoButton = _driver.FindElement(By.CssSelector("input[title ='Info']"));
IJavaScriptExecutor js = _driver as IJavaScriptExecutor;
js.ExecuteScript("arguments[0].click();", infoButton);
_driver.SwitchTo().DefaultContent();
return new ShippingMethodDetailsPageObject(_driver, false);
}
我遇到了一个类似的问题。如果是同样的问题,在ChromeDriver有一个错误,它不能点击某些元素,因为周围的div等。真的有点蹩脚。
一个简单的解决方法是发送回车键,例如element.SendKeys(Keys.Enter)。
我有一些测试在Firefox中一直有效,而在Chrome中它让我抓狂,因为有时它成功通过,有时"。点击"不工作,测试将失败。
花了很长时间才注意到它,但原因是:我过去常常将浏览器最小化到80%,以便能够在IDE旁边看到浏览器。看来"。当我点击的时候,点击"不工作
至少对我来说这是一个问题