perl - 如何使用 find_elements 查找多个元素的文本
问题描述
我对使用 Selenium Remote Driver 和 Perl 还很陌生。我想做的是让 Selenium 使用文本的部分匹配来查找页面上的所有元素。然后将这些元素的全文存储到一个数组中。
我试过使用:
@elements = $driver->find_elements("//tbody/tr[td[2]/div/span[2][contains(text(),'matching text')]]")->get_text;
但是,这似乎不起作用。
我也试过:
@elements = $driver->find_elements("//tbody/tr[td[2]/div/span[2][contains(text(),'matching text')]]");
这确实用 webelements 填充数组。
my @elements;
my @elementtext;
my $elementtext;
@elements = $driver->find_elements("//tbody/tr[td[2]/div/span[2][contains(text(),'matching text')]]");
foreach my $currentelement (@elements) {
$elementtext = $driver->find_element($currentelement)->get_text();
push @elementtext, $elementtext;
}
这会导致 perl 生成错误,因为 webdriver 找不到该元素。关于我做错了什么以及如何解决它的任何想法?我怀疑问题在于 @elements 数组的内容实际上不是 xpath 元素。
这是一个html示例:
<td>
<div class='cellContent'><a href="/link/1">Atlanta</a></div>
</td>
<td>
<div class='cellContent'>City</div>
</td>
<td>
<div class='cellContent'>Georgia</div>
</td>
<td class='sort_column'>
<div class='cellContent'>USA</div>
</td>
</tr>
<tr>
<td>
<div class='cellContent'><a href="/travelers/1">Joe Passenger</a></div>
</td>
<td>
<div class='cellContent'> <span>NFL</span>
<span>matching text: Atlanta.Falcons.team</span>
</div>
</td>
我想将“匹配文本:Atlanta.Falcons.team”存储到数组中。
解决方案
您可以使用此 xpath 直接指向 span 标签。
//tbody/tr/td/div/span[contains(text(),'matching text')]
推荐阅读
- npm - ng new 说很多软件包已被弃用
- python - Python 函数返回结果,但最后也返回“无”
- javascript - 元素不会 appendChild
- python-3.x - pandas resample 避免在上采样时丢失日期
- postgresql - PostgreSQL jsonb - 通过数组元素搜索字符串
- node.js - http-server 在后台运行
- android - 如何在android中设置一个按钮来切换带有动画的图像?
- python - 具体的 Python 2 到 Python 3 的转换头疼
- javascript - 如何在赛普拉斯的 Chrome 上访问网络呼叫?
- java - 错误:无法解析“:app@debug/compileClasspath”的依赖关系:无法解析androidx.appcompat:appcompat:1.1.0