Vba 如果元素存在,则执行操作,如果不存在,则跳过下一步

Vba 如果元素存在,则执行操作,如果不存在,则跳过下一步,vba,selenium,automated-tests,web-testing,webautomation,Vba,Selenium,Automated Tests,Web Testing,Webautomation,如果某个元素存在,我需要做一些事情,如果该元素不存在,我需要跳到代码的其余部分。我尝试过几种方法,但我不知道为什么它不起作用,代码在我看来是合乎逻辑的,而且它适用于类似的宏。 代码如下: Do DoEvents Loop Until driver.ExecuteScript("document.readystate") <> "complete" If driver.FindElementByName("x").I

如果某个元素存在,我需要做一些事情,如果该元素不存在,我需要跳到代码的其余部分。我尝试过几种方法,但我不知道为什么它不起作用,代码在我看来是合乎逻辑的,而且它适用于类似的宏。 代码如下:

Do
    DoEvents
Loop Until driver.ExecuteScript("document.readystate") <> "complete"

If driver.FindElementByName("x").IsPresent Then
Item.Offset(0, 2).Value = "Completed already" 'And need to skip to next iteration

ElseIf driver.FindElementByName("x") Is Nothing Then
Set cancel= driver.FindElementByName("cancelbutton")
cancel.Click


Set myVar= Item.Offset(0, 1)
Set radiobtn = driver.FindElementByXPath("//input[@value='" & myVar & "']")    
radiobtn.Click

Set cancelSelected = driver.FindElementByName("submitCancel")
cancelSelected.Click
driver.SwitchToAlert.Accept
Item.Offset(0, 2).Value = "Canceled"
driver.Refresh
driver.Wait 1000
End If

当页面上存在元素X时,元素Y不存在,反之亦然。我也尝试了
.count>0
,但仍然不起作用。有谁能帮我一个解决方案或者给我一些提示和窍门吗?

试着不要使用driver.findelement,而是使用driver.findelements(By.whatever).size()>0我希望它能与vbs一起工作,它能与Java 100%一起工作。

试着不要使用driver.findelement,而是使用driver.findelements(By.whatever).size()>0我希望它能与vbs一起工作,实际上,我在Udemy上买了一门课程,自己找到了答案。有几种方法可以确定元素是否存在,以及如果元素存在或不存在,下一步该怎么做。有趣的是,这个解决方案太简单了,我很不好意思错过了

第一个
Dim By作为新By
然后在if子句前后添加一秒的wait:

driver.Wait 500
If driver.IsElementPresent(By.Name("uncompleteButton__")) Then
Item.Offset(0, 2).Value = "Can't do stuff, go to next iteration."
Else
Set cancelitemsbtn = driver.FindElementByName("cancelButton")
cancelitemsbtn.Click
Item.Offset(0, 2).Value = "Can do stuff"
driver.Wait 500
End if

事实上,我在Udemy上买了一门课程,自己找到了答案。有几种方法可以确定元素是否存在,以及如果元素存在或不存在,下一步该怎么做。有趣的是,这个解决方案太简单了,我很不好意思错过了

第一个
Dim By作为新By
然后在if子句前后添加一秒的wait:

driver.Wait 500
If driver.IsElementPresent(By.Name("uncompleteButton__")) Then
Item.Offset(0, 2).Value = "Can't do stuff, go to next iteration."
Else
Set cancelitemsbtn = driver.FindElementByName("cancelButton")
cancelitemsbtn.Click
Item.Offset(0, 2).Value = "Can do stuff"
driver.Wait 500
End if

感谢您的回答,在VBA中,我们可以编写驱动程序。找到两种方法,我以前也尝试过这种方法,但它不起作用。可能您需要一些时间来等待该元素。如果是这种情况,您可以使用智能等待,例如WebDriverWait w1=new WebDriverWait(驱动程序,8);w1.直到(ExpectedConditions.或(ExpectedConditions.presenceOfElementLocated(By.id(“submit_btn”)),ExpectedConditions.presenceOfElementLocated(By.cssSelector(“div.visible-desktop a.hosted-payment-btn.btn primary”));然后使用大小的东西。谢谢你的回答,在VBA中我们可以编写驱动程序。找到两种方法,我以前也尝试过这种方法,但它不起作用。也许你需要一些时间来等待该元素。如果是这样的话,你可以使用智能等待,例如WebDriverWait w1=new WebDriverWait(driver,8);w1.直到(ExpectedConditions.或(ExpectedConditions.presenceOfElementLocated(By.id(“submit_btn”)),ExpectedConditions.presenceOfElementLocated(By.cssSelector(“div.visible-desktop a.hosted-payment-btn.btn primary”));在那之后,使用大小的东西。有没有一个url,我们可以用来使这成为一个可复制的问题?当然,还有合适的x,请提供场景的y值,即使我共享一个URL,您也无法看到它,因为它与业务相关,并由VPN和2factor验证器保护。请提供更多详细信息,然后说明您尝试了什么,以及在每种情况下的确切结果是什么,包括所有完整的错误消息。包括您添加的显式等待时间(如果已使用且与错误消息相关),readystate不会等待所有元素加载。它不如内置的隐式webdriver可靠。如果抛出错误,为什么不设置一个错误处理部分来处理该场景,然后在旁边设置一个简历来让您返回呢?只要您在错误处理程序之前有一个exit sub,并且在错误处理程序中有一个适当的err.Number测试就可以了,即使用错误或缺少错误来分支代码。请记住重置错误。是否有一个url我们可以用来使这成为一个可复制的问题?当然,还有适当的x,请提供场景的y值,即使我共享一个URL,您也无法看到它,因为它与业务相关,并由VPN和2factor验证器保护。请提供更多详细信息,然后说明您尝试了什么,以及在每种情况下的确切结果是什么,包括所有完整的错误消息。包括您添加的显式等待时间(如果已使用且与错误消息相关),readystate不会等待所有元素加载。它不如内置的隐式webdriver可靠。如果抛出错误,为什么不设置一个错误处理部分来处理该场景,然后在旁边设置一个简历来让您返回呢?只要您在错误处理程序之前有一个exit sub,并且在错误处理程序中有一个适当的err.Number测试就可以了,即使用错误或缺少错误来分支代码。记住重置错误。