如何通过Selenium Basic中的FindElementByXPath根据HTML定位元素

时间:2018-06-27 02:18:35

标签: excel vba selenium selenium-webdriver xpath

我正在编写VBA代码以登录到网页并加载我在excel工作表中拥有的一些信息。

我是硒新手。我已经正确完成了登录部分,但是现在我需要单击一个元素,并且不断出现错误。

我需要点击Company 2按钮。

Example of the page

这是我到目前为止所得到的:

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

输出NoSuchElementError

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

输出ElementNotVisible

我不知道我在做什么错,我认为隐藏的第一个输入有一些事情要做。希望任何人都能帮助我。

6 个答案:

答案 0 :(得分:1)

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

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

那又好又短。

CSS selectorinput[value='Company 1']。这说带有input标签的find元素具有属性value,值为'Company 1'

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

来查找第二个按钮

input[value="Company 2"]

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

答案 3 :(得分:0)

您可以使用任何xpath,乍一看我发现您的xpath不正确,请尝试以下操作:

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

您还可以使用findelements()存储所有按钮,并使用其他方式提取公司2按钮

答案 4 :(得分:0)

根据您共享的 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
    

答案 5 :(得分:0)

您是否尝试过右键单击检查中的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()

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