Selenium VBA -运行时错误11 ElementyNotVisible错误元素不可交互

nhhxz33t  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(127)

我正在使用下面提到的代码边缘浏览器的自动化
除“If then Else”块外,代码工作正常。
完整的脚本如下所示

Dim Obj As New WebDriver
' search for company - SF 1cr and above
Sub EdgeAutoSF1CRA0()
Set Obj = New Selenium.EdgeDriver
Dim ele As WebElement
Dim By As New Selenium.By
Obj.SetCapability "ms:edgeOptions", "{""excludeSwitches"":[""enable-automation""]}"
Obj.Start "edge", ""
Obj.Get "https://*********************"
Obj.Window.Maximize

    Obj.FindElementByName("croreAccount").SendKeys ("Search")
    Obj.FindElementByXPath("//*[@id='loadSuitFiledDataSearchAction']/div[1]/div[3]/div[4]/img").Click
        Obj.FindElementById("borrowerName").SendKeys (ThisWorkbook.Sheets("Sheet1").Range("C5").Value)
        Obj.FindElementByXPath("//*[@id='search-button']/ul/li[1]/div/input").Click
        Obj.Wait 30000

If Obj.FindElementByCss("#downloadReport").Attribute("Style" = "display") = "none" Then

 Obj.FindElementByXPath("//*[@id='three-icons']/ul/li[3]/a/div").Click
 Else
 Obj.FindElementByXPath("//*[@id='downloadReport']/div").Click

End If

End Sub

在If then Else语句中,我想搜索id“downloadReport”的style属性,查找“display:none”
网站上的代码为< a href="downloadStatusReport" id="downloadReport" style="display: none;"><div class="download-icon">Download</div></a>
但是,代码始终将语句评估为False,然后继续执行命令"Obj.FindElementByXPath("//*[@id='downloadReport']/div").Click"

vcudknz3

vcudknz31#

1.属性名称为style,而不是大写的Style
1.您可以构造定位器,使所需的样式值成为定位器本身的一部分。
1.您可以使用FindElements代替FindElement,这样它将返回一个匹配元素的列表,如果找到这样的元素,它将返回一个非空列表,否则它将是一个空列表。使用此选项,您可以检查返回的列表是否为空,如下所示:

If Not IsEmpty(Obj.FindElementsByCss("[id='downloadReport'][style*='none']")) Then
    
 Obj.FindElementByXPath("//*[@id='three-icons']/ul/li[3]/a/div").Click
 Else
 Obj.FindElementByXPath("//*[@id='downloadReport']/div").Click
    
End If
gwbalxhn

gwbalxhn2#

简而言之,定位一个 * style * 属性设置为***display: none;的元素是没有价值的。即使您定位了该元素,您也无法单击它。因此,If-Then-Else * 逻辑不会按预期工作。
相反,找到所需的元素,即
visibleenabled**元素,这样您就可以调用单击它。

相关问题