【问题标题】:findElement By XPath not supported in Selenium VBA?Selenium VBA 不支持通过 XPath 查找元素?
【发布时间】:2013-11-21 09:38:25
【问题描述】:
variableName = driver.findElement(By.XPath(".//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]"))

运行上面的似乎总是会导致错误:

这是为什么?我总是看到其他人使用 findElement By XPath。如果有帮助,我使用 Selenium 的“记录”功能生成了大约一半的代码。然后,我将代码转换为“VBA/Webdriver”,然后将其粘贴到 Excel 中用作宏。

我的代码到底有什么问题?我之前使用过 findElement 很多次,所以我不得不猜测问题出在我的代码的 By.XPath 部分......有什么办法解决这个问题吗?

编辑:即使 variableName = driver.findElementsByXPath(".//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]") 会导致错误“无效的过程调用或参数”,即使它看起来不错。

【问题讨论】:

    标签: excel vba selenium selenium-webdriver xpath


    【解决方案1】:

    试试:

    variableName = driver.findElementByXPath("//div[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]")
    

    请注意,我删除了 xPath 开头的 . 并将 * 替换为 div。此外,你最后错过了一些东西。您只是在这里声明路径,并没有真正获得价值。

    编辑:仅引用 xPath 通常是不够的。您想对其执行操作,获取里面的文本、标记名等吗?

    EDIT2:测试以获取.Text 属性返回“在 Selenium VBA 中不支持通过 XPath 查找元素?”消息。

    【讨论】:

    • 第一个导致无效的过程或调用,第二个对象不支持此属性或方法...我将在一秒钟内编辑我的完整代码以防万一造成这种情况。
    • 其实现在我想想……我的代码是在为变量分配一个元素而不是我想要的,即它包含的文本吗?
    • @JimmyK:没错。你的声明,我之前没有指出,是不完整的。这就像指着一个房子的地址,而不是说你想从房子里得到什么。例如,使用上面编辑的代码 (.findElementByXPath...) 并在末尾添加 .TagName。它应该为您的元素返回最直接的标签,即span
    • 啊哈!这就说得通了。我设法使用.Text 抓住了我需要的东西。非常感谢您的帮助!我还想知道您是否可以再帮我做一件事。现在修改后的代码导致.Set Str 抱怨对象不支持这个属性或方法,但它不应该抱怨吗?
    • 你好,@JimmyK。您是指剪贴板宏中的.SetText 吗?尝试使用CopyText variablename,而不使用()。无需过多详细说明我可能会出错,() 通常在您必须将函数分配给变量时使用。例如,Set wbk = Workbooks.Open("Aha")。但是,如果只是普通调用打开AhaWorkbooks.Open "Aha" 就足够了。希望这能回答您的问题。
    【解决方案2】:

    这对我有用:

    Dim variableName() as variant
    
    variableName = driver.findElementsByXPath("//div[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]").getdata
    

    注意它是“通过 XPath 查找元素 [复数]”。这将创建一个二维数组。 variableName(1,1) 将包含您要查找的数据。

    【讨论】:

      【解决方案3】:

      (我知道已经 6 年多了,但这是我的第一个贡献,我无法抗拒!也许这可以帮助其他人)

      您必须初始化以下内容:

      Dim By As New By, variableName As WebElement
      

      因为variableName是一个对象,所以必须声明它,如下:

      Set variableName = driver.FindElement(By.Xpath(".//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]"))
      

      【讨论】:

        猜你喜欢
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        • 1970-01-01
        • 2022-07-05
        • 2021-10-11
        • 2020-11-29
        • 2021-03-20
        相关资源
        最近更新 更多