c# - 使用 Selenium 查找网页的所有元素并忽略错误
问题描述
我在这里和这里做了一些研究,但是当我使用这个随机 url 应用给定示例时:https ://www.ibm.com/support/pages/it-possible-use-upper-or-lowercase-function-xpath -expression我使用Selenium WebDriver for .NET得到以下错误:
OpenQA.Selenium.StaleElementReferenceException: '{script src="https://example.com/"} 的元素引用已过时;要么元素不再附加到 DOM,它不在当前框架上下文中,要么文档已被刷新'
我的目的是在这个通用函数中获取当前网页上的所有元素:
Function FindElementsByText(drv As IWebDriver, text As String,
stringComparison As StringComparison) As ReadOnlyCollection(Of IWebElement)
Return (From element As IWebElement In drv.FindElements(By.CssSelector("*"))
Where element.Text.Equals(text, stringComparison)
).ToList().AsReadOnly()
End Function
在我指示驱动程序导航到我在开头指定的 url 之后,哪里drv.FindElements(By.CssSelector("*"))
(或drv.FindElementsByXPath("//*")
)是导致上述异常的原因。
对于受XPath 1.0的翻译功能限制的其他通用功能,上述功能将是一个很大的改进:
Function FindElementsByText(drv As RemoteWebDriver, text As String,
ignoreCase As Boolean) As ReadOnlyCollection(Of IWebElement)
Const translateUpperText As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÑÇ"
Const translateLowerText As String = "abcdefghijklmnopqrstuvwxyzáéíóúàèìòùäëïöüâêîôûñç"
If ignoreCase Then
Return drv.FindElementsByXPath($"//*[contains(translate(text(), {translateUpperText}, {translateLowerText}),'{text.ToLower()}')]")
Else
Return drv.FindElementsByXPath("//*[contains(text(),'{text}')]")
End If
End Function
我的问题是:我怎样才能摆脱以正确方式获取网页中所有元素的错误?
解决方案
推荐阅读
- sumo - 将 Vissim 文件转换为 SUMO
- javascript - 无法使用 Multer 将文件上传到 Azure BLOB
- python - 套索和岭回归低精度问题
- javascript - 为什么 JavaScript 数组中的最后一个空/未定义元素被忽略
- javascript - 如何使用 jest 测试 objectContaining?
- reactjs - 组件返回 TypeError:无法读取未定义的属性“地图”
- javascript - axios 忽略回放
- ios - 使用节页脚视图向页脚视图所在的部分添加一行?
- upgrade - What is the difference between Informix server and Informix SE?
- spring - java - 如何在运行应用程序的java spring mvc中修复错误HTTP Status 500 Target Unreachable,标识符'...'解析为null?