[更新]
我刚刚意识到,在我尝试执行上述操作时,该应用程序已经启动了第二个选项卡。这会让事情变得一团糟吗
尝试浏览web应用程序的几个步骤。已经设法访问了前两个页面,但下一步失败了,因为它找不到元素,这是<li>
项目中的一个链接,所以我通过Selenium等待助手使用FindByLinkText
页面上唯一的特定元素是一个简单的锚点
<ul>
<li>top menu item</li>
<li>
<ul>
<li>
<a>branch link here</a>
</li>
</ul>
<li>
</ul>
我的代码中失败的部分:
$seleniumWait = New-Object -TypeName OpenQA.Selenium.Support.UI.WebDriverWait($ChromeDriver, (New-TimeSpan -Seconds 10))
$seleniumWait.Until([OpenQA.Selenium.Support.UI.ExpectedConditions]::ElementIsVisible([OpenQA.Selenium.By]::LinkText("branch link here")))
$ChromeDriver.FindElementByLinkText("branch link here").Click()
错误:
Exception calling "FindElementByLinkText" with "1" argument(s): "no such element: Unable to locate element:
我想我可能明白为什么了。如果我检查页面源代码,就会发现有很多jquery用于动态构建菜单。然而,只要看一下这些元素,我就会看到上面概述的链接和菜单结构,但它是在页面加载时动态生成的。如果元素被DOM看到,那么上面的方法应该可以工作,对吗?
[更新]
我刚刚意识到,在我尝试执行上述操作时,该应用程序已经启动了第二个选项卡。这会让事情变得一团糟吗
我找到了一个解决方案。假设您只从父选项卡打开一个新选项卡。
#Loop through until we find a new window handle
foreach($window in $ChromeDriver.WindowHandles)
{
if($currentWindow -ne $window)
{
$ChromeDriver.SwitchTo().Window($window);
break;
}
}