selenium 2(webdriver)如何实现WebElement

时间:2011-04-30 13:44:25

标签: python selenium selenium-webdriver webdriver implementation

我正在考虑的情景是基本的:

page = driver.open_page(URL)
linkElement = page.find_elements(XPATH)[0]
linkElement.click()

(我假设我正在使用远程机器 - 即远程驱动程序)。服务器如何知道要点击哪个元素。

更一般地说,我找不到硒2实施的概述。也就是说,一方面只是告诉故事,而不是在代码中一行一行,而是比api更详细的东西。

2 个答案:

答案 0 :(得分:5)

你是对的,没有一个很好的“一刀切”的“封面”看看WebDriver如何实现其API的各个部分,主要是因为实际的实现可能会有很大不同,具体取决于在浏览器和操作系统上。你最接近的是project wiki上的各个页面。

要回答您的具体问题,远程服务器会创建客户端驱动程序的本地实例,并使用它来查找并单击该元素。驱动程序(InternetExplorerDriver,FirefoxDriver,ChromeDriver等)通常使用JavaScript来查找元素并在页面上获取其尺寸和位置。如果需要,元素将滚动到视图中,并将OS级别的鼠标事件发送到浏览器窗口以模拟点击。

但是,这只是常见情况,并且存在例外情况。例如,某些浏览器可能会使用JavaScript automation atoms以外的方法找到该元素。同样,某些操作系统上的某些驱动程序依赖于合成事件而不是OS级别或所谓的“本机”事件。要记住的重要一点是远程服务器实例化在本地调用驱动程序时使用的对象,而不使用Selenium远程服务器。

答案 1 :(得分:0)

如果我理解你的问题:

启动远程Web驱动程序服务器。通过远程驱动程序客户端(即您的测试),该服务器被告知要获取页面(“URL”是先前设置的变量,例如:String URL = "http://www.asdf.com";)。

然后告诉服务器通过一些XPath查找获取页面上的所有元素('XPATH'类似于By.xpath("//div(@class = 'some_button_class')") - 这是WebDriver的java实现,我不确定它是如何在Ruby中使用的)。此命令将返回WebElements列表 - 所有'div'元素看起来像这样<div class="some_button_class"><div>。如果您不熟悉,请查看how XPath works

由于您在命令末尾使用[0],因此您告诉服务器返回该列表中的第一个元素(第一个看起来像<div class="some_button_class"><div>的div)

最后,您告诉服务器对该元素执行单击操作。服务器获取该命令,将其转换为javascript并将该javascript注入页面。注入的javascript触发页面上的“click”事件,并执行真实用户点击元素时会发生的事情。

希望这有帮助。