[Selenium Learning] Die acht Positionierungsmethoden von Selenium

1.1 ID-Positionierung

Der ID-Attributwert des HTML-Tags ist eindeutig, daher besteht keine Möglichkeit, mehrere Elemente basierend auf der ID zu finden. Das Folgende ist ein Beispiel für die Eingabe des Textes „Python“ in das Suchfeld auf der Baidu-Homepage. Der ID-Attributwert des Suchfelds ist „kw“, wie in Abbildung 1.1 dargestellt:

Der Code lautet wie folgt: Die Methode „find_element_by_id“ ist veraltet. Verwenden Sie find_element(By.ID, 'kw').

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
# 需要将浏览器驱动添加到环境变量中
# 打开百度
driver.get('https://www.baidu.com/')
# 通过id,在搜索输入框中输入文本“python”
driver.find_element(By.ID, 'kw').send_keys('python')
# 点击搜索
driver.find_element(By.ID, 'su').click()
# 关闭浏览器
driver.close()

1.2 Namenspositionierung

Das obige Baidu-Suchfeld kann auch mit dem Namen implementiert werden, wie in Abbildung 1.1 gezeigt. Der Wert des Namensattributs ist „wd“, und die Methode „find_element(By.NAME, ‚wd‘)“ bedeutet Positionierung nach Name

Code wie folgt anzeigen:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')
# 通过name,在搜索输入框中输入文本“自动化测试”
driver.find_element(By.NAME, 'wd').send_keys('自动化测试')
# 点击搜索
driver.find_element(By.ID, 'su').click()
# 关闭浏览器
driver.close()

Hinweis: Bei der Positionierung mit der Namensmethode muss sichergestellt werden, dass der Namenswert eindeutig ist, andernfalls schlägt die Positionierung fehl.

1.3 Klassenpositionierung

Nehmen Sie als Beispiel das Baidu-Homepage-Suchfeld, wie in Abbildung 1.1 dargestellt. Der Klassenattributwert lautet „s_ipt“, „By.CLASS_NAME“, „s_ipt“ bedeutet Positionierung nach Klassenname

Code wie folgt anzeigen:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')
# 通过class,在搜索输入框中输入文本“web测试”
driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('web测试')
# 点击搜索
driver.find_element(By.ID, 'su').click()
# 关闭浏览器
driver.close()

1.4 link_text-Positionierung

link_text verwendet den gesamten Namen des Hyperlinks als Schlüsselwort, um das Element zu finden. Nehmen Sie als Beispiel den Hyperlink „News“ auf der Baidu-Homepage, wie in Abbildung 1.2 dargestellt, das Schlüsselwort lautet „News“.

Code wie folgt anzeigen:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')
# 通过link_text定位,点击‘新闻’超链接
driver.find_element(By.LINK_TEXT, '新闻').click()
# 关闭浏览器
driver.close()

Hinweis: Um diese Methode zum Auffinden von Element-Hyperlinks verwenden zu können, müssen die chinesischen Schriftzeichen vollständig geschrieben sein.

1.5 partielle_Link_Text-Positionierung

Das heißt, ein Teil des Hyperlink-Textes wird zum Auffinden des Elements verwendet, ähnlich einer Fuzzy-Abfrage in einer Datenbank. Am Beispiel des Hyperlinks „Neuigkeiten“ wird nur das Wort „neu“ benötigt, das eine Teilmenge des gesamten Textes des Hyperlinks darstellt.

Code wie folgt anzeigen:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')
# 通过partial_link_text定位,用超链接文字的部分文本来定位元素,类似数据库的模糊查询
driver.find_element(By.PARTIAL_LINK_TEXT, '新').click()
# 关闭浏览器
driver.close()

1.6 Tag-Name-Positionierung

Die Positionierung des Tag-Namens bedeutet die Positionierung über den Tag-Namen. Suchen Sie, wie in Abbildung 1.6 gezeigt, das Tag „form“ und geben Sie den Tag-Attributwert „name“ aus.

Code wie folgt anzeigen:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')
# tag_name 定位即通过标签名称定位
print(driver.find_element(By.TAG_NAME, 'form').get_attribute('name'))

Die Konsole gibt nach Erfolg „f“ aus:

1.7 CSS-Positionierung

Die Vorteile der CSS-Positionierung sind schnelle Geschwindigkeit und prägnante Syntax. Der Inhalt in Tabelle 1.1 stammt aus dem CSS-Referenzhandbuch von W3School. Es gibt mehr als ein Dutzend Selektoren für die CSS-Positionierung. In diesem Abschnitt werden hauptsächlich einige häufig verwendete Selektoren vorgestellt.

Am Beispiel des Baidu-Suchfelds lautet der Code wie folgt:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')

#  以class选择器为例,实现CSS定位,在搜索框输入“python3”
driver.find_element(By.CSS_SELECTOR, '.s_ipt').send_keys('python3')

#  以id定位语法结构为:#加 id 名,实现CSS定位,在搜索框输入“python3”
driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('python3')

# CSS 定位主要利用属性 class 和 id 进行元素定位。也可以利用常规的标签名称来定位,如输入框标签“input”,在标签内部又设置了属性值为“name=’wd’”
driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys('python3')

# CSS 定位方式可以使用元素在页面布局中的绝对路径来实现元素定位。百度首页搜索输入框元素的绝对路
# 径为“html>body>div>div>div>div>div>form>span>input[name="wd"]”
driver.find_element(By.CSS_SELECTOR, 'html>body>div>div>div>div>div>form>span>input[name="wd"]').send_keys('python3')

# CSS 定位也可以使用元素在页面布局中的相对路径来实现元素定位。相对路径的写法和直接利用标签名称来定位,两者
# 的代码实现的功能是一致的
driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys('python3')

# 点击搜索
driver.find_element(By.ID, 'su').click()
# 关闭浏览器
driver.close()

1.8 XPath-Positionierung

Die Methode zum Auffinden von Elementen über XPath ist bei schwer zu findenden Elementen sehr effektiv und kann in fast allen Fällen gelöst werden, insbesondere bei einigen Elementen, die keine Attribute wie ID und Name haben.

XPath ist die Abkürzung für XML Path Language, einer Sprache, mit der der Speicherort bestimmter Teile von XML-Dokumenten bestimmt wird. Es durchsucht Elementnamen und Attribute in XML-Dokumenten und sein Hauptzweck besteht darin, Knoten in XML-Dokumenten zu finden. Die XPath-Positionierung bietet eine größere Flexibilität als die CSS-Positionierung. XPath kann vorwärts oder rückwärts suchen, während die CSS-Positionierung nur vorwärts suchen kann, die XPath-Positionierung ist jedoch langsamer als CSS.

Die XPath-Sprache enthält Stammknoten, Elemente, Attribute, Text, Verarbeitungsanweisungen, Namespaces usw. Der folgende Text ist ein XML-Beispieldokument, das verschiedene Knotentypen von XML demonstriert und das Verständnis von XPath erleichtert.

<?xml version = "1.0" encoding = "utf-8" ?> 
<!-- 这是一个注释节点 --> 
<animalList type="mammal"> 
 <animal categoruy = "forest"> 
 <name>Tiger</name> 
 <size>big</size> 
 <action>run</action> 
 </animal> 
</animalList>

Unter diesen ist <animalList> der Dokumentknoten und auch der Wurzelknoten; <name> ist der Elementknoten; type="mammal" ist der Attributknoten.

Beziehung zwischen Knoten:

• Elternknoten. Jedes Element hat einen übergeordneten Knoten. Im obigen XML-Beispiel ist das Tierelement der übergeordnete Knoten der Elemente name, size und action.

• Untergeordnete Knoten. Im Gegensatz zum übergeordneten Knoten gehen wir hier nicht auf Details ein.

• Geschwisterknoten, manche werden auch Geschwisterknoten genannt. Es stellt Knoten dar, die denselben übergeordneten Knoten haben. Wie im obigen Code gezeigt, sind die Elemente name, size und action alle Geschwisterknoten.

• Vorfahrenknoten. Es bezieht sich auf den übergeordneten Knoten eines Knotens oder auf den übergeordneten Knoten eines übergeordneten Knotens usw. Wie im obigen Code gezeigt, sind die Vorfahrenknoten des Namenselementknotens animal und animalList.

• Nachkommende Knoten. Es repräsentiert die untergeordneten Knoten eines Knotens, die untergeordneten Knoten untergeordneter Knoten usw. Wie im obigen Code gezeigt, umfassen die Nachkommenknoten des animalList-Elementknotens Tier, Name usw.

Am Beispiel des Baidu-Suchfelds lautet der Code wie folgt:

driver = webdriver.Firefox()
# 打开百度
driver.get('https://www.baidu.com/')
# XPath 有多种定位策略,最简单直观的就是写出元素的绝对路径。
driver.find_element(By.XPATH, '/html/body/div/div/div/div/div/form/span/input').send_keys('python3')

# XPath还可以使用元素的属性值来定位。//input 表示当前页面某个 input 标签,[@id='kw'] 表示这个元素的 id 值是 kw。
driver.find_element(By.XPATH, "//input[@id='kw']").send_keys('python3')

# 如果一个元素本身没有可以唯一标识这个元素的属性值,我们可以查找其上一级元素。
# form[@class='fm  has-soutu']通过 class 定位到父元素,后面的/span/input 表示父元素下面的子元素。
driver.find_element(By.XPATH, "//form[@class='fm  has-soutu']/span/input").send_keys('python3')

# 如果一个属性不能唯一区分一个元素,那么我们可以使用逻辑运算符连接多个属性来查找元素
driver.find_element(By.XPATH, "//input[@id='kw' and @class='s_ipt']").send_keys('python3')

# 点击搜索
driver.find_element(By.ID, 'su').click()
# 关闭浏览器
driver.close()

In diesem Kapitel werden hauptsächlich die acht Positionierungsmethoden von Selenelementen vorgestellt. Jede Positionierungsmethode hat ihre eigene spezielle Verwendung. Der Leser muss nur seine Besonderheiten beherrschen. Sie müssen mehr verwenden, mehr nachdenken und die Erfahrungen im Projekt zusammenfassen. Mit der Zeit werden Sie ein tieferes Verständnis dieser Positionierungsmethoden haben.

Ich denke du magst

Origin blog.csdn.net/weixin_73348410/article/details/128962063
Empfohlen
Rangfolge