我正在尝试理解不同的接口,实现Selenium中的接口和方法的类。
我可以理解Interface SearchContext是由WebDriver接口继承的,而后者又由ForefoxDriver等其他类实现。
findElement是一个方法,作为SearchContext接口的一部分,由FirefoxDriver实现(因为fireFoxDriver实现了WebDriver)。
还有另一个叫做“By”的类,它有一组嵌套的子类。
现在findElement的语法如下:
driver.findElement(By.name("q"));
我无法理解传递给方法findElement的参数,因为它是作为参数传递的对象还是在findElement方法中调用了一些其他函数?
任何人都可以澄清传递给此函数findElement的参数究竟是什么?
谢谢。
答案 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对象时,您可以使用各种方式获取元素
所以有各种方法来获取元素
在selenium中,当你使用findElement方法时,你必须说“使用哪个”你指示selenium找到元素?使用名称或使用id或watever它是..
这就是为什么他们给了一个班级。因此,如果您想找到具有类名的元素,那么您可以使用findElement(By.ByClassName)
如果您想通过Id找到元素,那么您可以使用findElement(By.ById)