Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium chrome驱动程序click()方法不总是单击元素_C#_Selenium_Integration Testing - Fatal编程技术网

C# Selenium chrome驱动程序click()方法不总是单击元素

C# Selenium chrome驱动程序click()方法不总是单击元素,c#,selenium,integration-testing,C#,Selenium,Integration Testing,我正在用c#编写集成测试,当我在对话框中的某些元素上使用click()方法时,不会发生任何事情,也不会出现任何错误。它将单击对话框中的某些元素,但不会单击其他元素。我想如果它没有正确地选择它们,那么它会抛出和异常,但它运行平稳,并表示测试通过,即使它从未实际单击过按钮。该对话框是一个iframe 我认为它可能试图单击一个尚未显示或启用的按钮,因此我在click()调用之前添加了以下内容: 同样,它运行时没有抛出异常,因此我假设它已找到元素,并且它已显示并启用 如果你需要更多信息,请告诉我。谢谢我

我正在用c#编写集成测试,当我在对话框中的某些元素上使用click()方法时,不会发生任何事情,也不会出现任何错误。它将单击对话框中的某些元素,但不会单击其他元素。我想如果它没有正确地选择它们,那么它会抛出和异常,但它运行平稳,并表示测试通过,即使它从未实际单击过按钮。该对话框是一个iframe

我认为它可能试图单击一个尚未显示或启用的按钮,因此我在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中它让我抓狂,因为有时它成功通过,有时“.click”不起作用,它会失败

花了很长时间才注意到这一点,但原因是:有时我会将浏览器最小化到80%,以便能够在IDE旁边看到浏览器。我这样做时,“.click”似乎不起作用


至少对我来说,这是个问题

你在哪里点击?从我看到的情况来看,你只找到了元素?就在那行代码的正下方。我看到你更新了你的问题。是的,我使用相同的代码块在相同的_frameElement中单击取消按钮,效果很好,我不明白为什么它会点击它而不是这一个。我找到了一个临时解决方案,使用了一个javascript点击方法,嵌入了selenium chrome驱动程序。点击(),如果你们中的任何人知道为什么这个方法有效,而selenium方法无效,我很想学习。谢谢我会在几个小时后发布我的解决方案作为答案。我要试试这个!谢谢你的帮助。这里需要注意一件事:如果你试图单击的不是链接或按钮等,那么你需要在其中添加一个tabindex,并收听keyup。你能详细说明一下吗?问题是自动点击该元素,而不是监听其他元素的点击。谢谢。输入或空格键单击对我不起作用。顺便说一句,OP提到的chrome驱动程序故障是否存在任何链接/github问题?这非常有效!我们在Spectron(使用WebDriver和ChromeDriver)上遇到了问题,切换窗口后点击没有注册。添加一个
.keys(“回车”)
成功了。奇怪的是,这个问题会在7年后突然出现!这是一个为我工作的最新的chrome驱动程序,我尝试了其他一切,但仍然无法点击标签元素。非常感谢<代码>受保护的静态无效ClickUsingJS(IWebElement elem){//var infoButton=CurrentDriver.FindElement(By.CssSelector(“input[title='Info']”);IJavaScriptExecutor js=CurrentDriver as IJavaScriptExecutor;js.ExecuteScript(“参数[0]。click();”,elem);CurrentDriver.switch to().DefaultContent();}这应该被接受为答案。干杯这是可行的,但重要的是要警告,这是在掩盖潜在的错误,如果元素不可单击(一件好事),本机selenium click会抛出一个错误,但事实并非如此。
    //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);
    }