硒元素在点(403,697)不可单击。其他元素将获得点击

时间:2018-08-24 10:20:47

标签: c# selenium

我正在尝试使用硒进行测试。我想单击一个按钮,但是我有一个等待几秒钟才消失的装载机。

与其他元素重叠的Loader元素。您可以在这里看到loader在我的页面中的外观。因此,我需要帮助以找到一种方法,直到该加载程序消失后才能继续进行测试

image

错误:

OpenQA.Selenium.WebDriverException
  HResult=0x80131500
  Message=unknown error: Element <select _ngcontent-c4="" class="col-xs-8 custom-input-styles custom-select ng-touched ng-dirty ng-valid" formcontrolname="organizationType">...</select> is not clickable at point (441, 620). Other element would receive the click: <div _ngcontent-c2="" class="loader-wrapper ng-trigger ng-trigger-visibilityChanged ng-animating" style="">...</div>
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.17134 x86_64)
  Source=WebDriver
  StackTrace:
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Click()
   at BnI.UITests.Register.TheProceedRedirectTest() in C:\Users\me\UITests\Register.cs:line 86

2 个答案:

答案 0 :(得分:0)

如果知道加载程序的类名,则只需添加以下代码片段(对于c#):

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds));
            var waiter = wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.ClassName(cssClass)));
            return waiter;

答案 1 :(得分:0)

您只需要等待jquery完成其工作即可。 这是我提出的解决方案的示例Java实现。

我不使用WebDriverWait,因为我必须定义一个超时。该脚本将等待jquery完成其工作,即使它需要10分钟。我已经在一个演示网站上尝试了此操作,在该网站中我预先配置了7分钟的硬编码等待时间。而且它对我有用。

//Wait for JQuery Load
public static void waitForJQueryLoad() {
    //Wait for jQuery to load
    ExpectedCondition<Boolean> jQueryLoad = driver -> ((Long) ((JavascriptExecutor) jsWaitDriver)
            .executeScript("return jQuery.active") == 0);

    //Get JQuery is Ready
    boolean jqueryReady = (Boolean) jsExec.executeScript("return jQuery.active==0");

    //Wait JQuery until it is Ready!
    if(!jqueryReady) {
        System.out.println("JQuery is NOT Ready!");
        //Wait for jQuery to load
        jsWait.until(jQueryLoad);
    } else {
        System.out.println("JQuery is Ready!");
    }
}

如果不是JQuery,则为

。只需看一下该网站(https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/)中提供的示例即可。您可能还会得到Angular,JQuery和XHR请求解决方案。