Protractor 量角器:如何处理“量角器”;元素在点(x,y)处不可单击,其他元素将收到“单击”;

Protractor 量角器:如何处理“量角器”;元素在点(x,y)处不可单击,其他元素将收到“单击”;,protractor,selenium-chromedriver,Protractor,Selenium Chromedriver,我想单击以下按钮,定位器: cssdiv.d-flex>[\u ngcontent-c1]>。导航栏切换器 和Xpath//div[@class='container d-flex在']/span[1]/a[1] 我还使用命令更新了chrome驱动程序:webdriver manager update 然后,我有:chromedriver_79.0.3945.36版 geckodriver v0.26.0版 Chome版本79.0.3945.88 当我运行量角器时,我得到了错误: 失败:元素单击

我想单击以下按钮,定位器:
css
div.d-flex>[\u ngcontent-c1]>。导航栏切换器

和Xpath
//div[@class='container d-flex在']/span[1]/a[1]

我还使用命令更新了chrome驱动程序:webdriver manager update
然后,我有:chromedriver_79.0.3945.36版
geckodriver v0.26.0版
Chome版本79.0.3945.88

当我运行量角器时,我得到了错误:

失败:元素单击被拦截:元素。。。在点(1157,20)处不可单击。其他 元素将收到单击:。。。 (会话信息:chrome=79.0.3945.88) (驱动程序信息:chromedriver=79.0.3945.16(93fcc21110c10dbbd49bbff8f472335360e31d05参考/分支机构负责人/3945@{262}),平台=窗口 新界10.0.18362 x86_64)

以下是我尝试的代码:

it('should return to the main menu', function () {
        browser.driver.manage().window().setSize(1284, 684);
        var until = protractor.ExpectedConditions;
        var EC = protractor.ExpectedConditions;
        var elem = element(by.css('span:nth-of-type(2)>span>a>svg'));

        browser.driver.wait(function () {
            browser.wait(EC.visibilityOf(elem), 10000);
            return elem;
        });

    elem.click();

})
原始代码(无等待)为

然后,我得到了这个错误:

失败:元素单击被拦截:元素。。。在点(137,23)处不可单击。其他 元素将收到单击:。。。 (会话信息:chrome=79.0.3945.88) (驱动程序信息:chromedriver=79.0.3945.16(93fcc21110c10dbbd49bbff8f472335360e31d05参考/分支机构负责人/3945@{262}),平台=窗口 NT 10.0.18362 x86_64)


有趣的是,点击这个按钮可以在页面的其他部分工作。

这个错误与chrome版本无关。问题是您尝试单击的元素上面有另一个元素。这在视觉上可能看起来不像它,但可以有一个容器或一个web元素位于该元素之上。查看是否可以找到将接收单击的元素。您可以在错误日志中找到它。查看单击该元素是否会得到与所需相同的结果

此错误与chrome版本无关。问题是您尝试单击的元素上面有另一个元素。这在视觉上可能看起来不像它,但可以有一个容器或一个web元素位于该元素之上。查看是否可以找到将接收单击的元素。您可以在错误日志中找到它。查看单击该元素是否会得到与所需相同的结果

使用javascript executor单击元素:

browser.executeScript('arguments[0].click();', elem);

单击使用javascript executor的元素:

browser.executeScript('arguments[0].click();', elem);

您好@Sankalan,谢谢您的支持,我在点击按钮之前添加了sleep(),它正在工作fine@IngriddBrito您应该将代码改为使用async await,这样就可以完全不用browser.sleep()。您可以查看如何操作Hi@Sankalan,感谢您的支持,我在单击按钮之前添加了sleep(),它正在工作fine@IngriddBrito您应该将代码改为使用async await,这样就可以完全不用browser.sleep()。你可以检查一下怎么做