Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.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
Css 使用selenium检测阻塞覆盖_Css_Selenium - Fatal编程技术网

Css 使用selenium检测阻塞覆盖

Css 使用selenium检测阻塞覆盖,css,selenium,Css,Selenium,我正在测试一个在浏览器弹出窗口中打开以显示对象详细信息的网站。这些弹出窗口有时是模态的,我的意思是,它们使屏幕的其余部分不起作用,并触发一个覆盖除弹出窗口以外的所有内容的灰色透明覆盖层。这个覆盖是预期的行为,这意味着我需要一种方法来检测它是否被正确触发 但是,我对这种覆盖的实现还不够熟悉,无法确定应该在DOM中的何处查找控制这种行为的属性。因此,我希望有人能提供更多关于这些覆盖通常如何配置的信息,为我指明正确的方向 显而易见的解决方案是简单地点击一个按钮,看看会发生什么,但我希望编写一个可以在整

我正在测试一个在浏览器弹出窗口中打开以显示对象详细信息的网站。这些弹出窗口有时是模态的,我的意思是,它们使屏幕的其余部分不起作用,并触发一个覆盖除弹出窗口以外的所有内容的灰色透明覆盖层。这个覆盖是预期的行为,这意味着我需要一种方法来检测它是否被正确触发

但是,我对这种覆盖的实现还不够熟悉,无法确定应该在DOM中的何处查找控制这种行为的属性。因此,我希望有人能提供更多关于这些覆盖通常如何配置的信息,为我指明正确的方向

显而易见的解决方案是简单地点击一个按钮,看看会发生什么,但我希望编写一个可以在整个测试套件中实现的方法,而不必为每种情况编写不同的检查


对于那些感兴趣的人,我正在使用Selenium编写Java脚本

我知道这已经很旧了,但它仍然可以帮助其他人。我最近刚刚为我们的React站点解决了一个类似的问题。我相信我们使用了react block ui模块来实现我们的阻塞覆盖

基本上,由于两个已知事实,我能够检测到某个元素被覆盖阻止:

  • 元素位于遵循特定命名约定的包含div(“覆盖层”)中。在我们的例子中,它是
    section-overlay-X
  • 如果这个覆盖是阻塞的,它将有一个class属性(名为
    av block ui
  • (希望您也能访问这些信息……或者类似的有用信息。)

    有了这些信息,我编写了两个实用程序方法来帮助我确定特定的
    WebElement
    是否被覆盖阻止。如果它被阻止,抛出一个
    elementnotinteractiableexception

    对于Java:

    ...
    By SECTION_OVERLAY_ANCESTOR_LOCATOR = By.xpath("./ancestor::div[contains(@id, 'section-overlay-')][1]");
    ...
    
        private WebElement findUnblockedElement(By by) {
        WebElement element = driver.findElement(by);
        if (isBlockedByOverlay(element)) {
            throw new ElementNotInteractableException(String.format("Element [%s] is blocked by overlay", element.getAttribute("id")));
        } else {
            return element;
        }
        }
    
        private boolean isBlockedByOverlay(WebElement element) {
        List<WebElement> ancestors = element.findElements(SECTION_OVERLAY_ANCESTOR_LOCATOR);
        WebElement overlayAncestor = ancestors.get(0);
        String overlayClass = overlayAncestor.getAttribute("class");
        return !StringUtils.isBlank(overlayClass);
        }
    
    。。。
    按SECTION\u OVERLAY\u祖先\u LOCATOR=By.xpath(“./祖先::div[contains(@id,'SECTION OVERLAY-')][1]”);
    ...
    私有WebElement findUnblockedElement(按){
    WebElement=driver.findElement(by);
    if(isBlockedByOverlay(元素)){
    抛出新的ElementNotInteractitableException(String.format(“元素[%s]被覆盖层阻止”,Element.getAttribute(“id”));
    }否则{
    返回元素;
    }
    }
    私有布尔值isBlockedByOverlay(WebElement元素){
    列表祖先=element.findElements(部分覆盖\u祖先\u定位器);
    WebElement overlayAncestor=祖先。获取(0);
    字符串overlyClass=overlayAncestor.getAttribute(“类”);
    return!StringUtils.isBlank(overlyclass);
    }
    
    下面是我的一段话:

    这在所有情况下都不起作用,但我通过检查body元素的溢出值解决了这个问题。modal的风格我试图在页面处于活动状态时跳过页面的禁用滚动。

    如果按Escape关闭弹出窗口会怎么样?我可以摆脱弹出窗口,这不是问题所在。覆盖是需要的行为,我想测试它是否在应该出现的时候出现。对于每个出现的弹出窗口,你有一个通用的类名吗?你给我们的信息很少,我们帮不了你多少忙。。。