【问题标题】:Element Click Intercepted Exception元素点击拦截异常
【发布时间】:2020-08-07 03:57:20
【问题描述】:

我无法在我的应用程序中对登录按钮执行点击操作。

下面是 HTML 代码。你可以在最后一行找到确切的按钮元素。

<div class="form-group dl-padding-10">

                        <select class="form-control form-control-solid" name="SelectedRoleID" id="SelectedRoleID" onchange="removeBorderColor()" required="">
                                <option id="default_val" selected="" disabled="" hidden="">Profile </option>
                                    <option value="15">Service Consultant</option>
                                    <option value="11">DLBO Developer</option>
                                    <option value="16">Admin Agent</option>
                                    <option value="17">Team Leader</option>
                                    <option value="18">Manager</option>
                                    <option value="19">CV Mandator</option>
                                    <option value="20">CV Agent</option>
                                    <option value="21">Forensics Agent</option>
                        </select>
                        <div class="dl-align-left" id="show_text" style="color:red">
                            &nbsp;
                        </div>

                    </div>

                    <div class="circle1-mask form-group" id="FingerprintContent" style="height:140px;z-index:2; background-image: none;">
                        <img src="Assets/img/fingerprint4.gif" id="fingerprint-img" data-status="active" style="height:140px; width:100px;" onclick="DeviceScript.scanFingerPrint(event)">
                    </div>
                        <div class="form-group dl-padding-10">
                            <button type="submit" id="register-btn" class="btn btn-block dl-button-primary dl-no-margin">Sign In (For Testing Purpose Only)</button>
                        </div>


                </div>
            </div>
</form>    </div>
</div>

请帮助我使用合适的 xpath 在登录按钮上执行点击操作。

也找到尝试过的代码图片。Code

Xpath=”//button[contains(text(), 'Sign In (For Testing Purpose Only)')]”
(Or)

IWebElement Signin = driver.FindElement(By.Id("register-btn"));
            Signin.Click();
(Or)

IWebElement Signinbutton = driver.FindElement(By.XPath("//button[contains(text(), 'Sign In (For Testing Purpose Only)')]"));


            Actions action = new Actions(driver);
            
            action.MoveToElement(Signinbutton).Click().Perform();
The error which i get:
OpenQA.Selenium.ElementClickInterceptedException : element click intercepted: Element <button type="submit" id="register-btn" class="btn btn-block dl-button-primary dl-no-margin">...</button> is not clickable at point (758, 646). Other element would receive the click: <div class="footer navbar-fixed-bottom">...</div>

【问题讨论】:

    标签: c# selenium unit-testing xpath automated-tests


    【解决方案1】:

    用javascript试试:

    IWebElement Signinbutton = driver.FindElement(By.XPath("//button[contains(text(), 'Sign In (For Testing Purpose Only)')]"));
    IJavaScriptExecutor javascriptExecutor = (IJavaScriptExecutor)driver;
    executor.ExecuteScript("arguments[0].click();", Signinbutton );
    

    【讨论】:

    • 这很简单,而且很有魅力
    【解决方案2】:

    看起来您缺少一些 html,因为错误引用了页脚。

    不喜欢线程休眠,但可以尝试一下,看看线程休眠是否允许页面加载。我想知道您的页面是否仍在加载并尝试单击。如果睡眠有效,我会删除它并移动到元素或尝试点击 java。

    Thread.Sleep(1000);
    driver.FindElement(By.XPath("//button[contains(text(), 'Sign In')]")).Click();
    driver.FindElement(By.Id("register-btn")).Click();
    

    【讨论】:

    • 这就是为什么我想知道页脚。根据您的 html,这一切对我来说都很好。您的页脚是否有额外的登录链接,其中 xpath 找到了多个元素?
    • 不..页脚没有任何登录链接..我怀疑我的xpath..因为按钮标签属于多个'div',xpath应该有什么变化吗?跨度>
    • 定位器应该只返回一个元素,而 div 无关紧要。通过 ID 定位比 xpath 更快。然而,聪明地使用你的 xpath 也是关键。虽然您可以使用 //div[@class='form-group dl-padding-10']/button[@id='register-btn'],但最好使用 id “register-btn”。你不想要的是像 //div[2]/span[4]/ul/a[3] 这样脆弱的 xpath - 这些是最糟糕的。
    【解决方案3】:

    你得到的例外是因为你试图点击的按钮在这个元素后面 &lt;div class="footer navbar-fixed-bottom"&gt;...&lt;/div&gt; 这似乎是您页面的页脚。

    您可以尝试以下任一步骤来解决问题

    1. 滚动到登录按钮下方的任何元素(如果有)。您可以使用以下代码:

      protected boolean scrollToElement(WebElement element) throws NoSuchElementException, StaleElementReferenceException { try { jsExecutor.executeScript("arguments[0].scrollIntoView(true);", element); return true; } catch (NoSuchElementException e) { logError("Element Not found exception when scrolling to element (JavaScript)", e); throw e; } catch (StaleElementReferenceException e) { logError("Stale element exeption when scrolling to element (JavaScript)", e); throw e; } }

      1. 如果是 accept cookies 或类似内容,请关闭页脚,或者您也可以将自定义 CSS 应用于该元素以隐藏它,然后尝试单击该元素。

      String css= "display:none !important;" protected void addCustomCSS(WebElement webElement, String css) { registerCall(new Object() { }.getClass().getEnclosingMethod().getName()); try { String style = (String) jsExecutor.executeScript("arguments[0].getAttribute('style')", webElement); jsExecutor.executeScript("arguments[0].setAttribute('style', " + css + ")", webElement); stylesQueue.add(style); } catch (Exception e) { e.printStackTrace(); } }

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 1970-01-01
      • 2021-02-26
      • 2021-09-04
      • 2019-11-08
      • 2022-01-05
      • 2021-10-28
      • 2020-02-13
      • 1970-01-01
      相关资源
      最近更新 更多