【问题标题】:How to locate the element as per the HTML through FindElementByXPath in Selenium Basic如何通过 Selenium Basic 中的 FindElementByXPath 根据 HTML 定位元素
【发布时间】:2018-06-27 02:18:34
【问题描述】:

我正在编写一个 VBA 代码来登录网页并加载我在 Excel 工作表中的一些信息。

我是 Selenium 的新手。我已经把登录部分弄对了,但现在我需要点击一个元素,但我不断收到错误。

我需要点击Company 2按钮。

这是我目前所得到的:

bot.FindElementByXPath("//input[@value=""Company 1""]").Click

输出NoSuchElementError

bot.FindElementByXPath("//input[@value=""Company 2""]").Click

输出ElementNotVisible

我不知道我做错了什么,我认为隐藏的第一个输入有问题。希望任何人都可以帮助我。

【问题讨论】:

    标签: excel vba selenium selenium-webdriver xpath


    【解决方案1】:

    可能会帮助您知道在大多数情况下您也可以使用ByCss,在这种情况下您可以使用:

    bot.FindElementByCss("input[value='Company 1']").Click
    

    这很好,很简短。

    CSS selectorinput[value='Company 1']。这表示查找带有input 标签的元素,其属性为value,值为'Company 1'

    【讨论】:

    • 选择器不太容易损坏,因为它们非常具体。你的那个看起来很有前途。
    • 嗨@SIM。很高兴见到你。有点简单,但您可能会在以下方面享受 5 分钟:flukeout.github.io 32 个级别。看看你的得分 :-) 先读右手边——我忘了​​!
    • 嗨 QHarr,不幸的是,这并没有解决问题。我认为这与先前的输入被隐藏有关。 input[value='Company 1'] -> NuSuchElementErrorinput[value='Company 2'] -> ElementNotVisibleError
    • 您可以尝试循环播放直到可见吗?可能超出了隐含的 selenium 等待时间?
    • 我在那条线之前有 10 秒。我可以看到按钮,但我不断收到ElementNotVisibleError --- 是否有可能隐藏的第一个输入有什么关系?
    【解决方案2】:

    XPath 可能不正确。请尝试以下语法:

    FindElementByXPath("//input[@value='Company 1']")
    

    【讨论】:

    • 嗨 rajeshkt,谢谢。但我一直收到同样的错误
    【解决方案3】:

    首先,尽可能使用 CSS 选择器。它们更容易处理。 现在,如果您使用 CSS 选择器,请尝试使用类似

    的方式查找第二个按钮

    input[value="Company 2"]

    有关此选择器的更多信息,请查看https://www.w3schools.com/cssref/sel_attribute_value.asp

    【讨论】:

      【解决方案4】:

      你可以使用任何 xpath,乍一看我发现你的 xpath 不正确,试试这个:

      //input[@type='button'][@value='Company 2']
      //input[@type='button'&& @value='Company 2']
      //input[@role='button'][@value='Company 2']
      

      您也可以使用findelements() 来存储所有按钮,使用 if else 可以提取公司 2 按钮

      【讨论】:

        【解决方案5】:

        根据您共享的 HTML,您可以在所需元素上调用 click(),您可以使用以下解决方案:

        • 点击文本为Company 1的元素:

          bot.FindElementByXPath("//input[@class='btn_empresa ui-button ui-widget ui-state-default ui-corner-all' and @value='Company 1']").Click
          
        • 点击文本为Company 2的元素:

          bot.FindElementByXPath("//input[@class='btn_empresa ui-button ui-widget ui-state-default ui-corner-all' and @value='Company 2']").Click
          

        【讨论】:

        • 嗨!在这两种情况下,我都会得到 NoSuchElementError。我认为这与隐藏第一个输入有关
        【解决方案6】:

        您是否尝试过右键单击检查中的 HTML 并转到复制>复制 XPath?这可能会给你一些不同的东西。也许按钮是从 Javascript 创建的,所以 WebDriver 看不到它们?

        或者试试

        Company_1 = bot.find_element_by_xpath("//input[@value='Company 1']")
        Company_1.click()
        
        Company_2 = bot.find_element_by_xpath("//input[@value='Company 2']")
        Company_2.click()
        

        并像其他人提到的那样用 ' ' 引号更改语法。

        【讨论】:

        • 嗨 Grim,我如何判断按钮是否是从 javascript 创建的?如果是这样,我可以点击它们吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多