了解Selenium中的方法findElement

时间:2013-11-21 18:44:35

标签: java selenium

我正在尝试理解不同的接口,实现Selenium中的接口和方法的类。

我可以理解Interface SearchContext是由WebDriver接口继承的,而后者又由ForefoxDriver等其他类实现。

findElement是一个方法,作为SearchContext接口的一部分,由FirefoxDriver实现(因为fireFoxDriver实现了WebDriver)。

还有另一个叫做“By”的类,它有一组嵌套的子类。

现在findElement的语法如下:

driver.findElement(By.name("q"));

我无法理解传递给方法findElement的参数,因为它是作为参数传递的对象还是在findElement方法中调用了一些其他函数?

任何人都可以澄清传递给此函数findElement的参数究竟是什么?

谢谢。

3 个答案:

答案 0 :(得分:2)

(Java)根据Selenium 2 API,

#findElement():

  Find the first WebElement using the given method. This method is affected by the 'implicit wait' times in force at the time of execution. The findElement(..) invocation will return a matching row, or try again repeatedly until the configured timeout is reached. findElement should not be used to look for non-present elements, use findElements(By) and assert zero length response instead.
  Specified by: findElement(...) in SearchContext

  Parameters:
    by The locating mechanism

  Returns:
    The first matching element on the current page

  Throws:
    NoSuchElementException - If no matching elements are found

  See Also:
    org.openqa.selenium.By
    org.openqa.selenium.WebDriver.Timeouts

findElement()接受一个论点。 By类的对象。我们来看看By类。

By.className       : Finds elements based on the value of the "class" attribute.
By.cssSelector     : Finds elements via the driver's underlying W3 Selector engine.
By.id              : a By which locates elements by the value of the "id" attribute.
By.linkText        : a By which locates A elements by the exact text it displays
By.name            : a By which locates elements by the value of the "name" attribute.
By.partialLinkText : a By which locates A elements that contain the given link text
By.tagName         : a By which locates elements by their tag name
By.xpath           : a By which locates elements via XPath

简而言之,这些都是您能找到所需元素的方法。这完全取决于您选择的理念。我个人总是使用By.cssSelector

答案 1 :(得分:1)

这是selenium选择元素的方式,类似于流畅的api。它使用户更容易阅读。传递给findElement的参数有点像伪选择器查询,类似于Jsoup。

例如,如果您想在此页面的左上角选择SO徽标,则可以

driver.findElement(By.id("hlogo"));

因此查询By.name("q")基本上选择具有属性name="q"

的元素

答案 2 :(得分:0)

在解析DOM对象时,您可以使用各种方式获取元素

  • 你可以通过id
  • 获得一个元素
  • 您可以按名称
  • 获取元素
  • 您可以按类
  • 获取元素

所以有各种方法来获取元素

在selenium中,当你使用findElement方法时,你必须说“使用哪个”你指示selenium找到元素?使用名称或使用id或watever它是..

这就是为什么他们给了一个班级。因此,如果您想找到具有类名的元素,那么您可以使用findElement(By.ByClassName)

如果您想通过Id找到元素,那么您可以使用findElement(By.ById)

请参阅this api link