如何通过xpath获取元素?

时间:2018-01-09 10:02:34

标签: puppeteer

我需要通过xpath在DOM中找到任何元素。我已经尝试了以下内容:

describe("storage.service", () => {
    let service: StorageService;

    beforeAll(() => service = new StorageService());

    it("should return the result of hasAvailableStorage()", () => {
        const spy = spyOn(navigator["webkitTemporaryStorage"], "queryUsageAndQuota").and.callFake(MockWebkitTemporaryStorage);
        service.hasAvailableStorage().subscribe(() => {
            expect(spy).toHaveBeenCalled();
        });
    });
});

返回错误是:

  

TypeError:page。$ x不是函数

3 个答案:

答案 0 :(得分:2)

看起来你的木偶版本可能已经过时了

page.$x()

是1.0.0的新手

答案 1 :(得分:0)

以下应该工作

let el = await page.xpath('//*[@id="readium-right-panel"]/ul/li[1]');

答案 2 :(得分:0)

该问题很可能是由于较旧的伪娘版本。您可能要检查package.json文件中的伪造版本。

小注:npm i https://github.com/GoogleChrome/puppeteer/不会升级木偶。

if(操纵符版本> 1.0.0)

###尝试这个,###

假设// * [@@ =“ =” ng-app“]是全局前缀,然后将其添加到Xpath变量之前。我为此使用了插值法。

    await page.waitForXPath(`//*[@id="ng-app"]/${Xpath}`, { visible: true });//waiting for the xPath element to be visible
    const elementToClick = await page.$x(`//*[@id="ng-app"]/${Xpath}`);
await elementToClick[0].click();

这是单击当然提取的元素的示例。

根据您的情况将是

    await page.waitForXPath('//*[@id="readium-right-panel"]/ul/li[1]');
    let el =await page.$x(`//*[@id="readium-right-panel"]/ul/li[1]`);
await el[0].click();

来源:the API DOCS Of Puppeteer