定位
定位有多种方式,id,class,css,xpath等。
id
cheese = driver.find_element(id: 'cheese')
# 链式查找
cheese = driver.find_element(id: 'cheese')
cheddar = cheese.find_element(id: 'cheddar')
css
driver.find_element(css: '#cheese #cheddar')
多个元素
<ol id=cheese>
<li id=cheddar>…
<li id=brie>…
<li id=rochefort>…
<li id=camembert>…
</ul>
mucho_cheese = driver.find_elements(css: '#cheese li')
相对定位
相对定位,selenium4可用
#above() 元素上
password_field= driver.find_element(:id, "password")
email_address_field = driver.find_element(relative: {tag_name: 'input', above:password_field})
below() 元素下
email_address_field= driver.find_element(:id, "email")
password_field = driver.find_element(relative: {tag_name: 'input', below: email_address_field})
#toLeftOf() 元素左
submit_button= driver.find_element(:id, "submit")
cancel_button = driver.find_element(relative: {tag_name: 'button', left:submit_button})
#toRightOf() 元素右
cancel_button = driver.find_element(:id, "cancel")
submit_button = driver.find_element(relative: {tag_name: 'button', right:cancel_button})
#near() 附近
email_address_label = driver.find_element(:id, "lbl-email")
email_address_field = driver.find_element(relative: {tag_name: 'input', near: email_address_label})
查找方法
find_element
此方法用于查找元素并返回第一个匹配的单个WebElement引用, 该元素可用于进一步的元素操作
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
begin
# Navigate to URL
driver.get 'https://google.com'
# Get search box element from webElement 'q' using Find Element
search_bar = driver.find_element(name: 'q')
# Perform action using WebElement
search_bar.send_keys 'Webdriver'
ensure
driver.quit
end
Find Elements
与"Find Element"相似, 但返回的是匹配WebElement列表. 要使用列表中的特定WebElement, 您需要遍历元素列表以对选定元素执行操作.
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
begin
# Navigate to URL
driver.get 'https://www.example.com'
# Get all the elements available with tag name 'p'
elements = driver.find_elements(:tag_name,'p')
elements.each { |e|
puts e.text
}
ensure
driver.quit
end
Find Element From Element
此方法用于在父元素的上下文中查找子元素. 为此, 父WebElement与"findElement"链接并访问子元素.
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
begin
# Navigate to URL
driver.get 'https://google.com'
# Get and store DOM element '<form>'
search_form = driver.find_element(name: 'f')
# Get search box element from webElement 'form'
search_bar = search_form.find_element(name: 'q')
# Perform action using WebElement
search_bar.send_keys 'Webdriver'
ensure
driver.quit
end
Find Elements From Element
此方法用于在父元素的上下文中查找匹配子WebElement的列表. 为此, 父WebElement与"findElements"链接并访问子元素
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
begin
# Navigate to URL
driver.get 'https://www.example.com'
# Get element with tag name 'div'
element = driver.find_element(:tag_name,'div')
# Get all the elements available with tag name 'p'
elements = element.find_elements(:tag_name,'p')
elements.each { |e|
puts e.text
}
ensure
driver.quit
end
Get Active Element
此方法用于追溯或查找当前页面上下文中具有焦点的DOM元素.
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
begin
driver.get 'https://www.google.com'
driver.find_element(css: '[name="q"]').send_keys('webElement')
# Get attribute of current active element
attr = driver.switch_to.active_element.attribute('title')
puts attr
ensure
driver.quit
end