我需要通过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不是函数
答案 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();