当前位置: 首页 > 知识库问答 >
问题:

量角器元素在点上不可点击

翁俊良
2023-03-14

我正在尝试使用量角器登录谷歌帐户

google-account-spec.js

const loginPage = require('../pages/login-page');
const EC = ExpectedConditions;

describe('google accounts', function () {
it('should log in', async function () {
    try {
        browser.waitForAngularEnabled(false);
        browser.ignoreSynchronization = true;
        browser.get('https://accounts.google.com/signin/v2/identifier?flowName=GlifWebSignIn&flowEntry=ServiceLogin');
        //writing my email into an email input
        await loginPage.sendKeysEmailInput('email');
        //clicking on the next button for the email input
        loginPage.getEmailNextButton().click();
        await browser.wait(EC.presenceOf(loginPage.getPasswordInput()), 300000);
        let id = await loginPage.getPasswordInput().getAttribute('id');
        await browser.wait(EC.elementToBeClickable(element(by.name(id))), 300000);
        //writing my password into password input
        await element(by.name(id)).sendKeys('password');
        //waiting for the next button for the password input to become clickabe            
        await browser.wait(EC.elementToBeClickable(element(by.id('passwordNext'))), 5000);
        await browser.wait(EC.presenceOf(element(by.id('passwordNext'))), 5000);
        //trying to click on next button for the password input and getting an error
        await element(by.id('passwordNext')).click();
    } catch (expection) {
        console.error(expection);
    }
});
});

conf.js

exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
onPrepare : function() {
    // browser.manage().window().setSize(1600, 1000);
    browser.manage().window().maximize();
},
capabilities: {
    'browserName': 'chrome'
},
specs: ['specs/google-accounts-spec.js'],
jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 3000000,
}
};

登录页面.js我正在使用页面对象模式(登录页面是页面对象)

var loginPage = function () {
var emailInput = element(by.id('identifierId'));
var passwordInput = element(by.id('password'));
var emailNextButton = element(by.id('identifierNext')).element(by.tagName('span'));


this.sendKeysEmailInput = async function(keys) {
    await emailInput.clear().sendKeys(keys);
};

this.getPasswordInput = function () {
    return passwordInput;
};

this.sendKeysPasswordInput = async function(keys) {
    await passwordInput.clear().sendKeys(keys);
};

this.getEmailNextButton = function(){
    return emailNextButton;
}
};

module.exports = new loginPage();

当我尝试点击下一步按钮输入密码时,我得到一个错误

{WebDriverError:未知错误:元素…在点(1100527)处不可单击。其他元素将收到单击:

它说该元素不可点击,但之前在代码中我一直在等待它变得可点击。所以我就是不明白,这个元素怎么能不点击。

我也尝试了最大化窗口在conf.js,但仍然得到了同样的错误。

奇怪的是,我并不总是得到这个错误,它发生在3次尝试中的1次。我想那是因为我的网速很快。

我知道有一个简单的方法可以通过编写 browser.sleep() 来解决这个问题,但我认为有一个更好、更快的解决方案,因为有了 browser.wait(),你可以等待比你实际应该等待的要多得多,结果,我的程序会变得慢得多。

共有2个答案

鱼阳伯
2023-03-14

首先,浏览器.waitForAngularEnabled与浏览器.ignore同步相同,最后一个从量角器5.1及更高版本中删除。从代码中删除任一。

然后,将promise与异步函数混合。因此,应该是<code>等待浏览器。waitForAngularEnabled(false);等待浏览器。get()并且在<code>loginPage.getEmailNextButton。这很可能导致了您的问题。

最后,您的消息显示WebDriverError:未知错误:元素...在点(1100,527)不可单击。其他元素将收到单击:。获取哪个元素实际获得单击的战利品,如果它真的阻止您与您的元素交互,请查看您是否需要关闭该元素或执行其他操作。

扶杜吟
2023-03-14


这可能会由于您希望单击的元素被包装而发生。例如,您希望单击“输入”,但必须单击他的包装器“div”,并且在这种情况下可能会引发错误。要绕过此问题,您可以单击包装器或执行JS单击。

export async function jsClickButton(button: ElementFinder) {

    try {
        return await browser.executeScript('arguments[0].click()', button).then(async() => {
            console.log('Element has been clicked.');
        });
    } catch (error) {
        console.log('Element could not be clicked', error);
    }
}
 类似资料:
  • 我有一个模式上传图像,当我点击上传图像,它是导航到本地计算机,然后选择指定的图像。在导航到本地计算机后,我发现了一个错误。 2个规格,1个故障。 和我上载映像的代码:

  • 问题内容: 嗨,我在让基本量角器测试正常工作时遇到了一些麻烦。 我的设置: 我使用requirejs,所以我使用angular.bootstrap()而不是ng-app attr来初始化angular。根据量角器文档,此功能不被立即使​​用,但对于不涉及单击的测试似乎效果很好。 量角器conf.json: 我使用一些包装在指令中的第三方jquery插件,我怀疑这些可能是问题的一部分。 考试: 错误

  • 我想单击以下按钮,定位符: css 和Xpath 我还使用命令:webdriver-manager update 更新了chrome驱动程序,然后,我有:version chromedriver_79.0.3945.36 geckodriver version v0.26.0 Chome version 79.0.3945.88 当我运行量角器时,我得到了错误: 失败:元素点击拦截:元素...在点

  • 我有一个使用Selenium WebDriver版本3.6和Chrome驱动程序的自动化项目。软件运行良好,直到它开始显示错误 未知错误:元素在点(25,-9)处不可单击(会话信息:Chrome=61.0.3163.100)(驱动程序信息:ChromeDriver=2.31.488763(092DE99F48A300323ECF8C2A4E2E7CAB51DE5BA8),平台=Windows NT

  • 问题内容: 我尝试用Selenium 抓取此网站。 我想单击“下一页”按钮,为此,我这样做: 它适用于许多页面,但不适用于所有页面,我收到此错误 始终为此页面 我尝试了这个 但是我遇到了同样的错误 问题答案: 另一个元素覆盖了您要单击的元素。您可以使用它来单击。