首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PowerShell和Selenium 4等待元素

使用PowerShell和Selenium 4等待元素
EN

Stack Overflow用户
提问于 2021-12-07 18:09:03
回答 2查看 1.6K关注 0票数 1

我正在更新以前使用Selenium 3.141的一些PowerShell代码。我有以下代码片段:

代码语言:javascript
运行
复制
Add-Type -LiteralPath "$seleniumPath\lib\net48\WebDriver.dll"
Add-Type -LiteralPath "$seleniumPath\lib\net48\WebDriver.Support.dll"
$url = "https://<webpage.com>"
$options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$options.AddArgument("--disable-gpu")
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($options)
[OpenQA.Selenium.Support.UI.WebDriverWait]$wait = New-Object OpenQA.Selenium.Support.UI.WebDriverWait ($driver, [System.TimeSpan]::FromSeconds(60))

$driver.Navigate().GoToURL($url)
$driver.FindElementById("username")
$wait.Until([OpenQA.Selenium.Support.UI.ExpectedConditions]::ElementExists([OpenQA.Selenium.By]::Id('username')))

使用Selenium4.0,FindElementById不再工作:

找不到OpenQA.Selenium.Support.UI.ExpectedConditions.类型

据我所知,OpenQA.Selenium.Support.UI.ExpectedConditions存在于WebDriver.Support中,对吗?

环顾四周寻找替代方案,我找到了SeleniumExtras.WaitHelpers,但这可能只适用于.netstandard2.1?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-08 18:47:32

最后,这对我起了作用:

代码语言:javascript
运行
复制
Add-Type -LiteralPath "$seleniumPath\lib\net48\WebDriver.dll"
Add-Type -LiteralPath "$seleniumPath\lib\net48\WebDriver.Support.dll"
$url = "https://<webpage.com>"
$options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$options.AddArgument("--disable-gpu")
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($options)
[OpenQA.Selenium.Support.UI.WebDriverWait]$wait = New-Object OpenQA.Selenium.Support.UI.WebDriverWait ($driver, [System.TimeSpan]::FromSeconds(60))

$driver.Navigate().GoToURL($url)
$driver.FindElementById("username")

$wait.Until([System.Func[OpenQA.Selenium.IWebDriver, System.Boolean]] { param($driver) Try { $driver.FindElement([OpenQA.Selenium.By]::Id('username')) } Catch { $null } })

如果您想返回元素对象而不是布尔值,则只需将"System.Boolean“(最后一行)更改为"OpenQA.Selenium.IWebElement”。

票数 2
EN

Stack Overflow用户

发布于 2022-04-07 02:02:52

ExpectedConditions类被弃用,并根据.Net变更量g删除

v3.11.0 标记为.NET ExpectedConditions过时。使用ExpectedConditions类与直接在代码中直接使用lambda函数(匿名方法)没有任何好处。由于社区似乎认为等待条件的“正式”存储库是可取的,所以现有代码已经迁移到基于GitHub的新组织下的新存储库中。希望这将鼓励来自社区的志愿者拥有这一守则。用户应该更新他们的引用并迁移他们的代码以使用SeleniumExtras.ExpectedConditions。这个实现将在以后的v4.0.0a1版本中从.NET语言绑定中删除 删除了不推荐的ExpectedConditions和PageFactory类,以及它们的支持类。

正如@StackExchangeGuy所指出的,在Powershell中使用脚本块类似于C#中的lamba表达式。要继续使用ExpectedConditions类,您可以:( a)从源构建DotNetSeleniumExtras并导入它或( b)降级到v3.141.0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70264992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档