Geb 选择器没有 select
Geb Selector doesn't select
我注意到在某些情况下 geb selector 无法按预期工作。当我从开发人员控制台复制 css selecor、css 路径或 xpath 并将它们用作 selector 在 geb 中时,它们不起作用。无论如何,在这个例子中我不能 select 我想要什么:
站点:https://money.cnn.com/data/fear-and-greed/
<div id="needleChart" style="background-image:url('//money.cnn.com/.element/img/5.0/data/feargreed/1.png');">
<ul>
<li>Fear & Greed Now: 72 (Greed)</li><li>Fear & Greed Previous Close: 72 (Greed)</li>
<li>Fear & Greed 1 Week Ago: 69 (Greed)</li><li>Fear & Greed 1 Month Ago: 58 (Greed)</li>
<li>Fear & Greed 1 Year Ago: 8 (Extreme Fear)</li>
</ul>
</div>
现在我想从第一个 li
标签中获取文本,这是我的代码:
public class MoneyCnnFearAndGreed extends Page {
static url = 'https://money.cnn.com/data/fear-and-greed'
static content = {
fearAndGreed { $("#needleChart").$("ul li")[0].text() }
}
}
Browser.drive {
to MoneyCnnFearAndGreed
println fearAndGreed
}
但是结果是空的。希望你能在这里帮助我。
您的 ul
列表元素被隐藏,请参阅对应的 CSS file:
.feargreed #needleChart ul {
visibility: hidden;
height: 0;
width: 0;
}
Geb 基于 Selenium WebDriver,因此您无法与隐藏内容交互,正如 Book of Geb 明确指出的那样:
We want to click the Geb link, but can’t because it’s hidden (WebDriver does not let you interact with hidden elements).
因此,除了从 Spock/Geb 测试中执行 JS 之外,您没有机会获得不可见元素的文本内容:
println js.exec("return document.querySelectorAll('#needleChart ul li')[0].textContent;")
我注意到在某些情况下 geb selector 无法按预期工作。当我从开发人员控制台复制 css selecor、css 路径或 xpath 并将它们用作 selector 在 geb 中时,它们不起作用。无论如何,在这个例子中我不能 select 我想要什么:
站点:https://money.cnn.com/data/fear-and-greed/
<div id="needleChart" style="background-image:url('//money.cnn.com/.element/img/5.0/data/feargreed/1.png');">
<ul>
<li>Fear & Greed Now: 72 (Greed)</li><li>Fear & Greed Previous Close: 72 (Greed)</li>
<li>Fear & Greed 1 Week Ago: 69 (Greed)</li><li>Fear & Greed 1 Month Ago: 58 (Greed)</li>
<li>Fear & Greed 1 Year Ago: 8 (Extreme Fear)</li>
</ul>
</div>
现在我想从第一个 li
标签中获取文本,这是我的代码:
public class MoneyCnnFearAndGreed extends Page {
static url = 'https://money.cnn.com/data/fear-and-greed'
static content = {
fearAndGreed { $("#needleChart").$("ul li")[0].text() }
}
}
Browser.drive {
to MoneyCnnFearAndGreed
println fearAndGreed
}
但是结果是空的。希望你能在这里帮助我。
您的 ul
列表元素被隐藏,请参阅对应的 CSS file:
.feargreed #needleChart ul {
visibility: hidden;
height: 0;
width: 0;
}
Geb 基于 Selenium WebDriver,因此您无法与隐藏内容交互,正如 Book of Geb 明确指出的那样:
We want to click the Geb link, but can’t because it’s hidden (WebDriver does not let you interact with hidden elements).
因此,除了从 Spock/Geb 测试中执行 JS 之外,您没有机会获得不可见元素的文本内容:
println js.exec("return document.querySelectorAll('#needleChart ul li')[0].textContent;")