Selenium4学习笔记

总结1:
Selenium4跟Selenium3两个版本目前掌握到的区别是查找元素的方法变化(本文主要使用的是Selenium4)
如:使用id查找

#前提是已经定义好了driver对象,现在直接使用
#selenium3 例子
driver.find_element_by_id("id")
#selenium4 例子,By需要导入:from selenium.webdriver.common.by import By
driver.find_element(By.id,"id")

总结2
由于执行完用例后浏览器会自动关闭,如需要保留浏览器不关闭则需要增加在driver.Chrome()函数中增加options参数,并赋值。代码如下

options = webdriver.ChromeOptions()
#参数中的True表示不关闭浏览器
options.add_experimental_option('detach', True)
driver = webdriver.Chrome(options=options)

总结3
查找元素方法
使用得较多的是CSS与Xpath,来对比一下两个方法的优缺点。
1、如果考到性能方面的可选择CSS,执行速度相对Xpath快,因为Xpath是扫描整个HTML/XML文件中所需要的元素,如果自动化脚本中大量使用Xpath方法会导致脚本执行速度下降。
2、有些HTML/XML相对复杂,使用CSS无法定位到想要的元素,可以使用Xpath模糊查找的方法找到匹配的元素,且能支持较复杂的表达式。谷歌浏览器支持复制Xpath方法及CSS,无需自己编写方法。
3、两个方法的各个表达式对比
在这里插入图片描述
总结4
查找元素常用方法

    #使用id查找这个方法中使用了try..except..是为了判断元素是否存在,存在则返回,不存在则抛出异常
    def find_by_id(self, id):
        try:
            return self.driver.find_element(By.ID, id)
        except NoSuchElementException:
            print("Element not found")
    def find_by_class(self, class_name):
        return self.driver.find_element(By.CLASS_NAME, class_name)

    def find_by_tag(self, tag_name):
        return self.driver.find_element(By.TAG_NAME, tag_name)

    def find_Xpath(self, xpath):
        return self.driver.find_element(By.XPATH, xpath)

    def find_CSS(self, css):
        return self.driver.find_element(By.CSS_SELECTOR, css)

总结5
selenium一些常见的问题
1、如何确定元素是否存在,上面总结4中代码已经进行阐述,可使用try…except…进行判断

2、如何选中下拉列表中的下拉选项
①通过属性查找

driver.find_element(By.XPATH, "//*[@value="your_value"]")

②通过顺序选择

#第三个,可根据顺序选择需要的
driver.find_element(By.XPATH, "//select[@id='keyword']/option[3]")
#css方法;最后一个select#keyword>option:last,第一个select#keyword>option:first
driver.find_element(By.CSS_SELECTOR, "select#keyword>option:nth-child(3)")

③通过选项可见文本

driver.find_element(By.XPATH, "//*[contains(text(),"keyword")]")

3、如何处理弹窗

alert = driver.switch_to.alert
#接受弹窗
alert.accept()
#取消弹窗
alert.dismiss()
#输入文本
alert.send_keys('输入文本内容')

4、如何去定位页面上动态加载的元素
使用显式等待的方法,下面是代码呈现

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#等待动态元素出现
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="dynamic-element"]'))
    )
    #也可使用css通过同级、父级、子级进行定位,上面使用的是xpath方法
    print("元素存在")
except TimeoutException:
    print("元素加载超时")

5、等待页面加载完全,滚动到指定位置并找到元素

# 等待直到页面完全加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'body')))
# 查找你要滚动到的元素
target_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="target-element"]')))
# 滚动到指定元素
driver.execute_script("arguments[0].scrollIntoView(true);", target_element)

6、等待方法
①显示等待:WebDriverWait()
:等到某个条件成立时继续执行。每隔一段时间检测,超出最大时间则抛出异常
is_disappeared = WebDriverWait(driver, 5).until_not(lambda x: x.find_element(By.ID,“someId”).is_displayed())
② 隐式等待:driver.implicitly_wait()
隐式等待中的时间并非一个固定的等待时间,它并不影响脚本的执行速度。比如进行某元素的定位时,如果元素可以定位就继续执行,如果目前定位不到就以轮询的方式持续判断该元素是否被定位到,如果超过规定的时间还没定位到就抛出异常。
driver.implicitly_wait(20)
7、常用断言方法
assertEqual(a, b): 断言 a 等于 b。
assertTrue(condition): 断言条件为真。
assertFalse(condition): 断言条件为假。
assertIn(item, container): 断言 item 在 container 中。
assertNotIn(item, container): 断言 item 不在 container 中

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值