元素在使用SendKeys时无法与Selenium Excel VBA交互

元素在使用SendKeys时无法与Selenium Excel VBA交互,excel,vba,selenium,xpath,css-selectors,Excel,Vba,Selenium,Xpath,Css Selectors,我正在尝试登录到一个站点,我正在使用FindElementById。在下面的代码中,使用SendKeys的第一部分工作得很好,但是当尝试对密码字段使用相同的技术时,我收到一条错误消息,它告诉我该元素不可交互 Sub Test() Dim bot As New WebDriver With bot .AddArgument "--disable-notifications" .Start "Chrome", "https://ww

我正在尝试登录到一个站点,我正在使用
FindElementById
。在下面的代码中,使用
SendKeys
的第一部分工作得很好,但是当尝试对密码字段使用相同的技术时,我收到一条错误消息,它告诉我该元素不可交互

Sub Test()
Dim bot As New WebDriver

With bot
    .AddArgument "--disable-notifications"
    .Start "Chrome", "https://www.excelforum.com/excel-programming-vba-macros/"
    .Get "/"
    
    .FindElementById("navbar_username").SendKeys "username"
    .FindElementById("navbar_password").SendKeys "password"
    '.FindElementByName("vb_login_password").SendKeys "password"
    Stop
End With
End Sub
试着引用这个


您试图访问的页面已将一个web元素添加到另一个web元素上。i、 id为navbar\u password\u的web元素在id为navbar\u password的web元素上显示提示。尝试参考上面的链接来解决您的问题

当元素状态不可单击时会发生这种情况。您必须使用webdriver wait属性并确保元素状态是可单击的

 WebDriverWait wait= new WebDriverWait(driver, 10);
    WebElement e= wait.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_of_element")));
    e.click();

你很接近。id属性为
navbar\u Password
密码字段具有以下属性:

style="display: none;"
因此,您将无法与元素交互


要向用户名密码字段发送字符序列,您可以使用以下任一选项:

  • 使用
    FindElementById()

  • 使用
    FindElementByCss()

  • 使用
    findelementbypath()


工具书类 您可以在以下内容中找到一些有趣的讨论:


具有清晰错误信息和位置(+)的良好重现性示例。如果使用snippet工具共享相关节点的html,则会从中受益。@QHarr在没有url的情况下共享html是必要的,但我已在代码中附加了url,因此使用Inspect会更有用。我喜欢url存在,但不是每个人都能访问它。在这种情况下,它看起来是一个非常容易接近的。这只是一个观察/建议。我已经为有一个可复制的例子而欣喜若狂,这就是upvote。非常感谢。当我一步一步地运行代码时,它起作用了,所以我发现在将数据发送到密码字段之前,我必须等待一段时间。当元素可用时,我如何将等待限制在元素上?我的意思是循环,直到元素准备好接收数据。@Yasserkalil给我一些时间,让我看看VB代码,然后我会回到youThanks。看来我只需要在你的建议之前排队等候。
.FindElementById("navbar_username").SendKeys "username"
.FindElementById("navbar_password_hint").SendKeys "password"
.FindElementByCss("input#navbar_username").SendKeys "username"
.FindElementByCss("input#navbar_password_hint").SendKeys "password"
.FindElementByXPath("//input[@id='navbar_username']").SendKeys "username"
.FindElementByXPath("//input[@id='navbar_password_hint']").SendKeys "password"