Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

1、定位元素(id、name、class、link、partial link)

(1)find_element_by_id()

用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”,【百度一下】按钮的id为“su”。

Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

from selenium import webdriver                            #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("python")   #输入框输入“python”
driver.find_element_by_id("su").click()            #点击【百度一下】按钮

(2)find_element_by_name()

用百度定位测试,用firebug查看定位元素 ,输入框的name为“wd”,【百度一下】按钮没有name属性,这里用id定位,id为“su”。

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_name("wd").send_keys("python") #输入框输入“python”
driver.find_element_by_id("su").click() #点击【百度一下】按钮

(3)find_element_by_class_name()

百度的class属性值是包含空格,用class无法定位百度。这里我改用bing搜索为测试实例,用firebug查看定位元素 ,输入框的class为“b_searchbox”,搜索按钮的class为“”b_searchboxSubmit“”

from selenium import webdriver                                            #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://cn.bing.com/")
driver.find_element_by_class_name("b_searchbox").send_keys("python") #输入框输入“python”
driver.find_element_by_class_name("b_searchboxSubmit").click() #点击【百度一下】按钮

(4)find_element_by_link_text()

find_element_by_link_text()是根据链接的文本来定位。以百度为定位测试,找百度页面“新闻”这个元素

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_link_text("新闻").click() #打开新闻链接

(5)find_element_by_partial_link_text()

find_element_by_partial_link_text()是根据链接的文本包含某个字符来定位。以百度为定位测试,找百度页面“新闻”中的“闻”:

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_partial_link_text("闻").click() #打开新闻链接

2、xpath定位元素

(1)通过绝对路径定位。一般很少用这种绝对路径定位,除非其他定位元素无法准确定位,才会用到。Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

用百度定位测试,用firebug和firepath查看定位元素 ,输入框的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[1]”,【百度一下】按钮的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input”。

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[1]").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input").click()

通过以上代码去执行,找不到输入框位置。是因为输入框定位位置不准确。firebug和firepath只是辅助工具,有时会出错,需要更新手动定位。

Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

所以输入框的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input”,【百度一下】按钮的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input”。

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input").click()

(2)简化xpath

WebDriver ELement Locator定位神器,可以快速定位。点鼠标右键

Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

a.通过元素属性进行定位-id

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("//input[@id='kw']").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("//input[@id='su']").click() #点击【百度一下】按钮

b.通过元素属性进行定位-name

from selenium import webdriver                          #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("//input[@name='wd']").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("//input[@id='su']").click() #点击【百度一下】按钮

还有很多定位没有讲,掌握以上定位可以满足工作需求,不需要大家全部掌握。后续我会再补充。

上一篇:GPIO模拟串口注意是事项


下一篇:Python | 用Pyinstaller打包发布exe应用