Selenium 简明教程

Selenium Webdriver - Identify Single Element

一旦我们导航到某个网页,我们必须与该页面中可用的 web 元素进行交互,比如点击链接/按钮、在编辑框中输入文本等,以完成我们的自动化测试用例。

By Id

为此,我们的第一个任务是识别该元素。我们可以对某个元素使用 id 属性进行识别,并利用 find_element_by_id 方法。利用该方法会返回属性 id 的匹配值的第一个元素。

如果没有与 id 属性的匹配值相匹配的元素,则会抛出 NoSuchElementException。

用于识别元素的 syntax 如下 −

driver.find_element_by_id("value of id attribute")

让我们看看一个 web 元素的 html 代码 −

byid

上图中突出显示的编辑框有一个 id 属性,值为 gsc-i-id1。让我们在识别出该编辑框后尝试输入一些文本。

Code Implementation

识别 web 元素的代码实现如下 −

from selenium import webdriver
#set chromedriver.exe path
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#url launch
driver.get("https://www.tutorialspoint.com/index.htm")

#identify edit box with id
l = driver.find_element_by_id('gsc-i-id1')

#input text
l.send_keys('Selenium')

#obtain value entered
v = l.get_attribute('value')
print('Value entered: ' + v)

#driver quit
driver.quit()

Output

chromedriver

输出显示消息 - Process with exit code 0,表示上面的 Python 代码已成功执行。此外,在编辑框中输入的值(通过 get_attribute 方法获取)——Selenium 会以打印的形式出现在控制台中。

By Name

一旦我们导航到某个网页,我们必须与该页面中可用的 web 元素进行交互,比如点击链接/按钮、在编辑框中输入文本等,以完成我们的自动化测试用例。

为此,我们的第一个任务是识别该元素。我们可以对某个元素使用 name 属性进行识别,并利用 find_element_by_name 方法。利用该方法会返回属性 name 的匹配值的第一个元素。

如果没有与 name 属性的匹配值相匹配的元素,则会抛出 NoSuchElementException。

用于按名称识别单个元素的 syntax 如下:

driver.find_element_by_name("value of name attribute")

让我们看看 web 元素的 html 代码,如下所示 −

by name

上图中突出显示的编辑框具有值为 search 的 name 属性。让我们尝试识别该编辑框后向其中输入一些文本。

Code Implementation

按名称识别单个元素的代码实现如下 −

from selenium import webdriver
#set chromedriver.exe path
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#url launch
driver.get("https://www.tutorialspoint.com/index.htm")

#identify edit box with name
l = driver.find_element_by_name('search')

#input text
l.send_keys('Selenium Java')

#obtain value entered
v = l.get_attribute('value')
print('Value entered: ' + v)

#driver close
driver.close()

Output

selenium java

输出显示消息 - Process with exit code 0,表示上面的 Python 代码已成功执行。此外,在编辑框中输入的值(通过 get_attribute 方法获取)——Selenium Java 会以打印的形式出现在控制台中。

By ClassName

一旦我们导航到某个网页,我们必须与该页面中可用的 web 元素进行交互,比如点击链接/按钮、在编辑框中输入文本等,以完成我们的自动化测试用例。

为此,我们的第一个任务是识别该元素。我们可以对某个元素使用 class 属性进行识别,并利用 find_element_by_class_name 方法。利用该方法会返回属性 class 的匹配值的第一个元素。

如果没有与 class 属性的匹配值相匹配的元素,则会抛出 NoSuchElementException。

用于按类名识别单个元素的 syntax 如下:

driver.find_element_by_class_name("value of class attribute")

让我们看看 web 元素的 html 代码,如下所示 −

by classname

上图中高亮的 Web 元素具有值为 heading 的 class 属性。让我们在识别出该元素后尝试获取该元素的文本。

Code Implementation

通过类名识别单个元素的代码实现如下所示:

from selenium import webdriver
#set chromedriver.exe path
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#url launch
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")

#identify edit box with class
l = driver.find_element_by_class_name('heading')

#identify text
v = l.text

#text obtained
print('Text is: ' + v)

#driver close
driver.close()

Output

by classname output

输出显示消息 - 退出代码为 0 的进程表示上述 Python 代码执行成功。此外,在控制台中打印了 Web 元素(从 text 方法获得)的文本 - 关于 Tutorialspoint。

By TagName

一旦我们导航到一个网页,我们就必须与页面上可用的网络元素交互,例如单击链接/按钮、在编辑框中输入文本等等,才能完成我们的自动化测试用例。

为此,我们的首要任务是识别元素。我们可以使用元素的标记名称进行识别,并利用 find_element_by_tag_name 方法。通过这种方式,将返回第一个匹配标记名称的元素。

如果没有匹配标记名称的元素,则将抛出 NoSuchElementException。

用于通过标记名称识别单个元素的 syntax 如下所示:

driver.find_element_by_tag_name("tagname of element")

让我们看看 web 元素的 html 代码,如下所示 −

by tagname

上图中高亮的编辑框标记名称为 input。让我们在识别出该元素后尝试在此编辑框中输入一些文本。

Code Implementation

通过标记名称识别单个元素的代码实现如下所示:

from selenium import webdriver
#set chromedriver.exe path
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#url launch
driver.get("https://www.tutorialspoint.com/index.htm")

#identify edit box with tagname
l = driver.find_element_by_tag_name('input')

#input text
l.send_keys('Selenium Python')

#obtain value entered
v = l.get_attribute('value')
print('Value entered: ' + v)

#driver close
driver.close()

Output

by tagname output

输出显示了信息 - 进程退出代码 0,表明上述 Python 代码已成功执行。此外,在编辑框中输入的值(从 get_attribute 方法获取) - Selenium Python 会在控制台打印出来。

在导航到某个网页后,我们可能通过单击链接来与 Web 元素进行交互以完成我们的自动化测试用例。链接文本用于具有锚标记的元素。

为此,我们的首要任务是识别元素。我们可以使用元素的链接文本属性进行识别,并利用 find_element_by_link_text 方法。通过这种方式,将返回第一个与给定链接文本的值匹配的元素。

如果没有与链接文本的值匹配的元素,则将抛出 NoSuchElementException。

用于通过链接文本识别单个元素的 syntax 如下所示:

driver.find_element_by_link_text("value of link text")

让我们看看 web 元素的 html 代码,如下所示 −

by link text

上图中高亮的链接具有标记名称 a 和链接文本 - 隐私政策。让我们在识别出该元素后尝试单击此链接。

Code Implementation

通过链接文本识别单个元素的代码实现如下所示:

from selenium import webdriver
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#url launch
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")

#identify link with link text
l = driver.find_element_by_link_text('Privacy Policy')

#perform click
l.click()
print('Page navigated after click: ' + driver.title)

#driver quit
driver.quit()

Output

by link text output

输出显示消息 - 退出代码为 0 的进程表示上述 Python 代码执行成功。此外,在控制台中打印了应用程序的页面标题(从 driver.title 方法获得) - 关于 Tutorials Point 的隐私政策 - Tutorialspoint。

在导航到某个网页后,我们可能通过单击链接来与 Web 元素进行交互以完成我们的自动化测试用例。部分链接文本用于具有锚标记的元素。

为此,我们的首要任务是识别元素。我们可以使用元素的部分链接文本属性进行识别,并利用 find_element_by_partial_link_text 方法。通过这种方式,将返回第一个与给定部分链接文本的值匹配的元素。

如果没有与部分链接文本的值匹配的元素,则将抛出 NoSuchElementException。

用于通过部分链接文本识别单个元素的 syntax 如下所示:

driver.find_element_by_partial_link_text("value of partial ink text")

让我们看看 web 元素的 html 代码,如下所示 −

by partial link text

上图中高亮的链接具有标签名称 - a 和部分链接文本 - 退款。让我们尝试在识别此链接后单击此链接。

Code Implementation

通过部分链接文本识别单个元素的代码实现如下所示 −

from selenium import webdriver
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#url launch
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")

#identify link with partial link text
l = driver.find_element_by_partial_link_text('Refund')

#perform click
l.click()
print('Page navigated after click: ' + driver.title)

#driver quit
driver.quit()

Output

by partial link text output

输出显示消息 - 以退出代码 0 处理,这意味着上述 Python 代码已成功执行。此外,应用程序的页面标题(从 driver.title 方法获得)- 退货、退款和取消政策 - Tutorialspoint 会打印在控制台中。

By CSS Selector

一旦我们导航到一个网页,我们就必须与页面上可用的网络元素交互,例如单击链接/按钮、在编辑框中输入文本等等,才能完成我们的自动化测试用例。

为此,我们的首要任务是识别元素。我们可以为元素创建一个 css 选择器,以进行识别并使用 find_element_by_css_selector 方法。这样,将返回具有给定 css 匹配值的第一个元素。

如果没有与 css 的匹配值相匹配的元素,则将抛出 NoSuchElementException。

通过 CSS 选择器识别单个元素的语法如下所示 −

driver.find_element_by_css_selector("value of css")

Rules to create CSS Expression

创建 css 表达式的规则如下所述

  1. 要使用 css 识别元素,表达式应为标签名[属性='值']。我们还可以专门使用 id 属性来创建 css 表达式。

  2. 使用 id,css 表达式的格式应为标签名#id。例如,input#txt [这里输入是标签名,txt 是 id 属性的值]。

  3. 使用 class 时,css 表达式的格式应为 tagname.class。例如,input.cls-txt [其中 input 是标签名,cls-txt 是 class 属性的值]。

  4. 如果父元素有 n 个子元素,并且我们想识别第 n 个子元素,那么 css 表达式应具有 nth-of –type(n)。

css expression

在上面的代码中,如果我们想识别 ul[Questions and Answers] 的第四个 li 子项,则 css 表达式应为 ul.reading li:nth-of-type(4)。类似地,要识别最后一个子项,css 表达式应为 ul.reading li:last-child。

对于其值动态变化的属性,我们可以使用 ^= 来查找其属性值以特定文本开头的元素。例如,input[name^='qa'] 其中,input 是标签名,name 属性的值以 qa 开头。

对于其值动态变化的属性,我们可以使用 $ = 来查找其属性值以特定文本结尾的元素。例如,input[class $ ='txt'] 其中,input 是标签名,class 属性的值以 txt 结尾。

对于值动态变化的属性,我们可以使用 = to locate an element whose attribute value contains a specific sub-text. For example, input[name ='nam']。此处,input 是标签名称,而 name 属性的值包含子文本 nam。

让我们看看 web 元素的 html 代码,如下所示 −

web elements

上面图像中突出显示的编辑框具有值的搜索 name 属性,css 表达式应为 input[name='search']。让我们在 identification 它后尝试在此编辑框中输入一些文本。

Code Implementation

通过 CSS 选择器识别单个元素的代码实现如下所示 −

from selenium import webdriver
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#implicit wait time
driver.implicitly_wait(5)

#url launch
driver.get("https://www.tutorialspoint.com/index.htm")

#identify element with css
l = driver.find_element_by_css_selector("input[name='search']")
l.send_keys('Selenium Python')
v = l.get_attribute('value')
print('Value entered is: ' + v)

#driver quit
driver.quit()

Output

selenium python

输出显示了信息 - 进程退出代码 0,表明上述 Python 代码已成功执行。此外,在编辑框中输入的值(从 get_attribute 方法获取) - Selenium Python 会在控制台打印出来。

ByXpath

一旦我们导航到一个网页,我们就必须与页面上可用的网络元素交互,例如单击链接/按钮、在编辑框中输入文本等等,才能完成我们的自动化测试用例。

为此,我们的首要任务是识别元素。我们可以为元素创建 xpath,以进行识别并使用 find_element_by_xpath 方法。这样,将返回具有给定 xpath 匹配值的第一个元素。

如果没有与 xpath 的匹配值相匹配的元素,则将抛出 NoSuchElementException。

通过 Xpath 识别单个元素的语法如下所示 −

driver.find_element_by_xpath("value of xpath")

Rules to create Xpath Expression

创建 xpath 表达式的规则如下所述:

  1. 要使用 xpath 识别元素,表达式应为 //tagname[@attribute='value']。xpath 可以有两种类型 - 相对和绝对。绝对 xpath 以 / 符号开头,从根节点开始到我们想要 identification 的元素。

例如,

/html/body/div[1]/div/div[1]/a
  1. 相对 xpath 以 // 符号开头,不从根节点开始。

例如,

//img[@alt='tutorialspoint']

让我们从根部开始看高亮链接 - 主页的 html 代码。

highlighted link

此元素的绝对 xpath 可以如下所示 −

/html/body/div[1]/div/div[1]/a.

元素主页的相对 xpath 可以如下:

//a[@title='TutorialsPoint - Home'].
home tab

Functions

还有一些可用的函数可帮助构建相对 xpath 表达式。

text()

它用于识别页面上具有可见文本的元素。xpath 表达式如下所示 −

//*[text()='Home'].
functions

starts-with

它用于 identification 其属性值以特定文本开头的元素。此函数通常用于在每个页面加载时其值都会发生变化的属性。

让我们看看 Q/A 链接的 html −

xpath expression

xpath 表达式应如下所示:

//a[starts-with(@title, 'Questions &')].
starts with

contains()

它标识一个其属性值包含子文本的元素。此函数通常用于在每次页面加载时都会更改其值的属性。

xpath 表达式如下 −

//a[contains(@title, 'Questions & Answers')].
contains

让我们看看下面显示的 webelement 的 html 代码 −

edit box highlighted

上图中高亮的编辑框有一个名为搜索的属性,xpath 表达式应为 //input[@name='search']。让我们在识别出此编辑框后尝试在其中输入一些文本。

Code Implementation

通过 XPath 识别单个元素的代码实现如下所示 −

from selenium import webdriver
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')

#implicit wait time
driver.implicitly_wait(5)

#url launch
driver.get("https://www.tutorialspoint.com/index.htm")

#identify element with xpath
l = driver.find_element_by_xpath("//input[@name='search']")
l.send_keys('Selenium Python')
v = l.get_attribute('value')
print('Value entered is: ' + v)

#driver quit
driver.quit()
console

输出显示了信息 - 进程退出代码 0,表明上述 Python 代码已成功执行。此外,在编辑框中输入的值(从 get_attribute 方法获取) - Selenium Python 会在控制台打印出来。