WebdriverIO 点击后在新页面上找不到任何元素

问题描述 投票:0回答:2

所以我在 WebdriverIO(Visual Studio Code、node.js、javascript 等)中遇到了令人沮丧的错误。我有一个脚本,该脚本从一个网站开始,通过一系列 IF/THEN,单击按钮将其引导至新网站。这很好用。但是当我在新网站上时,我的代码都不起作用,因为我的选择器都找不到这些元素。

但更关键的是:当我创建另一个直接进入此页面的脚本时,完全相同的代码可以工作。所有元素都可以被找到、交互、获取文本/点击一切。

为什么完全相同的代码仅在直接打开页面时才起作用,而不是在通过单击先前页面的按钮打开页面时起作用。

    console.log('INTERMEDIARY PAGE')
    browser.pause(2000)
    let Title = $("(//h1[contains(@class,'cs-entry__title')])")
    console.log(Title)
    let ProductButton = $("(//*[contains(@class,'button')])[1]")
    ProductButton.click()

“错误:无法使用选择器“(//*[contains(@class,'button')])[1]”调用元素上的单击,因为找不到元素”

更新: 在新页面上,我执行了 console.log(browser.getUrl()),它显示了 URL 1 的 URL。我在 URL 2 上!我眼前看到的并不是爬虫看到的。这是机器人保护的一种形式吗?

webdriver-io
2个回答
0
投票

好吧,我仍然不知道是什么原因造成的,但我确实找到了解决方法。不要单击链接(DIV 标签),而是对其执行 getAttribute('href') 操作。然后自己打开。

<a href="LINK" rel="noopener noreferrer" target="_blank" role="link" class="css-4rbku5 css-18t94o4 css-1dbjc4n r-1loqt21 r-18u37iz r-16y2uox r-1wtj0ep r-1ny4l3l r-o7ynqc r-6416eg">
    let button = $("(//a[contains(@class,'css-4rbku5 css-18t94o4 css-1dbjc4n r-1loqt21 r-18u37iz r-16y2uox r-1wtj0ep r-1ny4l3l r-o7ynqc r-6416eg')])[2]")
    let attribute = button.getAttribute('href')
    console.log(attribute) --> prints out LINK
    browser.url(attribute)

0
投票

由于某种原因,虽然我遇到了类似的问题(浏览器加载新页面后无法找到 DOM 元素),但调用

await browser.getURL()
会正确返回新网站的 URL,因此我能够解决该问题通过执行以下操作:

const url = await browser.getUrl();
await browser.url(url);

我们必须诉诸这样的黑客来简单地单击链接,这似乎非常荒谬,但我想这就是 WebDriverIO 野兽的本质......

© www.soinside.com 2019 - 2024. All rights reserved.