使用selenium一次性在网页上断言大量文本?

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

我正在使用的: C#、Selenium(v 4.20)、NUnit、Visual Studio

场景: 我试图断言给定网页上的所有文本都是可见的并且也是正确的文本。我有几个页面需要验证,所有页面都有大量文本。我能够像正常任何其他元素断言一样找到每个段落的每个元素,并确保该元素的所有 .Text() 都符合我的预期。然而,这非常耗时,并且当这些元素可能发生变化时会变得很困难。

有更好的方法吗?例如获取页面源文本,然后将其与我的解决方案中保存的预期文本文件进行比较?这似乎是一个有点“繁重”的操作,但我不知道还有什么其他方法。

我尝试断言包含每个文本段落的每个元素,虽然这在大多数情况下都有效,但非常耗时。我看到的另一个问题是,同一段落/文本部分的页面文本将出现在单独的元素中,使得某些区域难以正确断言。我期待一定有更好的方法来做到这一点。

selenium-webdriver web-scraping selenium-chromedriver nunit
1个回答
0
投票

使用 selenium is_displayed 方法获取所有可视元素。然后在您创建的视觉元素上使用 .text 来收集所有视觉文本。将视觉文本拆分为单独的句子,并将所需的文本拆分为单独的句子。检查可见句子列表中是否存在每个必需的句子,如果存在则网页通过,否则失败。

这应该不会很耗时,因为它是完全自动化的,但是任何使用 selenium 的东西都会比 requests+beautiful soup 慢,因为你正在模拟浏览器。如果您要做很多网站,那么我建议首先设置 requests+beautiful soup 类似地获取网页文本并根据您所需的文本进行检查,一旦通过,您就可以使用 selenium 进行第二次检查。假设您正在检查的大多数网站都无法通过第一次检查,这会快得多。

如果您重复访问同一网站,请确保实施速率限制。

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