即使Xpath正确且唯一,其他元素也会获得点击(量角器)

时间:2019-02-05 18:57:21

标签: javascript typescript selenium protractor ui-automation

我有以下两个元素

属性元素 Property

Xpath-> //sprk-accordion-item[@ng-reflect-title="Property"]//sprk-icon

修复元素 Repair

Xpath-> //sprk-accordion-item[@ng-reflect-title="Repair"]//sprk-icon

我用来单击元素的代码

public async click(webElement: ElementFinder) {
    try {
        this.expectConditions.waitForElementToBeVisible(webElement);
        this.moveToElement(webElement);
        await webElement.click();
    } catch (error) {
        console.log('Error while clicking the element' + webElement.locator().toString() + 'Error:: ' + error);
    }
}

    public async waitForElementToBeVisible(element: ElementFinder) {
    const ec = protractor.ExpectedConditions;
   await browser.wait(ec.visibilityOf(element), this.time, 'Unable to find the element' + element.locator().toString());
   }


public async moveToElement(webElement: ElementFinder) {
    await browser.actions().
        mouseMove(webElement).
        perform();
}


click(element(by.xpath('//sprk-accordion-item[@ng-reflect-title="Property"]//sprk-icon'));

我的问题是,如果我运行测试大约10次

  • 4次测试按预期运行。当我尝试点击 属性元素,属性元素正在获得点击。

    4次测试未按预期运行。当我尝试点击 属性元素,修复元素正在获得点击,甚至 尽管我什至没有编写任何代码来单击修复元素。

    2倍,没有元素收到点击。

没有焦点问题,因为在单击代码中,我将在单击元素之前移到该元素。我使用的x路径是唯一的,它们甚至不是动态的。

当我在单击属性元素之前放置browser.sleep(1000);时,它正在按预期方式单击。不过,如果这是时间问题,应该说找不到该元素。但是,当定位符唯一时,如何单击“修复”元素?

希望有人回答了这个问题。

预先感谢

1 个答案:

答案 0 :(得分:2)

您错过了几个await

public async click(webElement: ElementFinder) {
    try {
        await this.expectConditions.waitForElementToBeVisible(webElement);
        await this.moveToElement(webElement);
        await webElement.click();
    } catch (error) {
        console.log('Error while clicking the element' + webElement.locator().toString() + 'Error:: ' + error);
    }
}