Selenium3自动化测试【21】find_element定位元素

本文介绍Selenium中8种常用的元素定位方法,包括ID、名称、类名等,并给出实际示例代码,帮助读者掌握不同场景下的元素定位技巧。

前面连载的内容,我们介绍了如下8种定位元素的方法。

  • find_element_by_id:通过元素的ID属性值来定位元素;
  • find_element_by_name:通过元素的name属性值来定位元素;
  • find_element_by_class_name:通过元素的class属性值来定位元素;
  • find_element_by_xpath:通过Xpath来定位元素;
  • find_element_by_tag_name:通过元素的tag name来定位元素;
  • find_element_by_css_selector:通过CSS选择器来定位元素;
  • find_element_by_link_text:通过元素标签对之间的文本信息来定位元素;
  • find_element_by_partial_link_text:通过元素标签对之间的部分文本信息来定位元素。
    而WebDriver还提供了另一种方法find_element(),其通过By来申明定位的方法,传入对应定位方法的定位参数。find_element()方法只用于定位元素。它需要传入了两个参数,第1个参数是定位的类型,由By提供(使用前需要通过from selenium.webdriver.common.by import By导入By),第2个参数是具体定位的方式。
    以搜索按钮元素为例,搜索按钮元素的html代码如下:
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">

对应的find_element()方法具体如下:

  • find_element(By.ID, “sb_form_go”);
  • find_element(By.CLASS_NAME,“b_searchboxSubmit”);
  • find_element(By.NAME,“go”);
  • find_element(By.CSS_SELECTOR,".b_searchboxSubmit");
  • find_element(By.XPATH,"//*[@id=‘sb_form_go’]");
  • find_element(By.LINK_TEXT,"") 由于搜素框元素没有Link text,所以对用属性值用替代;
  • find_element(By.PARTIAL_LINK_TEXT,"****");
  • find_element(By.TAG_NAME,"****") 。

以Bing搜索页为例。

  • 找到搜索框与搜索按钮元素;
  • 在搜索框中键入bella关键字;
  • 用鼠标单击搜索按钮;
  • 提交搜索请求。

通过By.ID的完整代码如下:

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

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

driver.find_element(By.ID,value="sb_form_q").send_keys("bella")
driver.find_element(By.ID,value="sb_form_go").click()

sleep(1)
driver.quit()  

通过By.NAME的完整代码如下:

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

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

driver.find_element(By.NAME,"q").send_keys("bella")
driver.find_element(By.NAME,"go").click()

sleep(1)
driver.quit()

通过By.CLASS_NAME的完整代码如下:

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

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

driver.find_element(By.CLASS_NAME,value="b_searchbox").send_keys("bella")
driver.find_element(By.CLASS_NAME,value="b_searchboxSubmit").click()

sleep(1)
driver.quit()

通过By.XPATH的完整代码如下:

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

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

driver.find_element(By.XPATH,"//*[@id='sb_form_q']").send_keys("bella")
driver.find_element(By.XPATH,"//*[@id='sb_form_go']").click()

sleep(1)
driver.quit()

通过By.CSS_SELECTOR的完整代码如下:

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

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

driver.find_element(By.CSS_SELECTOR,".b_searchbox").send_keys("bella")
driver.find_element(By.CSS_SELECTOR,".b_searchboxSubmit").click()

sleep(1)
driver.quit()

如果你觉的文章读的不过瘾,可以查看详细的视频教程。
【2021】UI自动化测试:Selenium3自动化测试
(https://edu.youkuaiyun.com/course/detail/29953)
【测试全系列视频课程】请点击我哦…
(https://edu.youkuaiyun.com/agency/59)

标题图书京东、当当有售

京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html

在使用 Selenium 进行自动化测试时,定位元素是一个常见需求。可以通过父元素对象来查找其子元素[^1]。具体来说,可以在 WebDriver 实例或一个 WebElement 对象上使用 `find_element` 或 `find_elements` 方法。 例如,如果已经获取了一个父元素,可以通过该元素对象查找其子元素。以下是一个 Python 示例代码: ```python # 假设 driver 是一个已经初始化的 WebDriver 实例 parent_element = driver.find_element_by_id("parent") # 使用父元素对象查找其子元素 child_element = parent_element.find_element_by_tag_name("child_tag") ``` 在上面的代码中,首先通过 `find_element_by_id` 方法找到父元素,然后使用父元素对象的 `find_element_by_tag_name` 方法来查找其子元素。如果需要查找多个子元素,可以使用 `find_elements` 方法,该方法返回一个包含所有匹配元素的列表,如果没有找到任何匹配的元素,则返回一个空列表[^1]。 对于需要等待元素加载的情况,可以使用显式等待(Explicit Waits),通过 `WebDriverWait` 结合 `expected_conditions` 来实现。这样可以确保在执行后续操作之前,目标元素已经出现在页面上。以下是一个使用显式等待的示例代码: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待父元素出现 parent_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "parent")) ) # 使用显式等待查找子元素 child_element = WebDriverWait(parent_element, 10).until( EC.presence_of_element_located((By.TAG_NAME, "child_tag")) ) ``` 在上述代码中,`WebDriverWait` 用于等待特定条件满足,这里使用了 `presence_of_element_located` 条件来等待父元素和子元素的出现[^2]。这种方法可以有效地避免因为元素尚未加载而导致的查找失败问题。 通过这些方法,可以灵活地在 Selenium定位元素,无论是直接通过父元素对象查找,还是结合显式等待机制来确保元素可用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo_Eagle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值