网站静态路径,华强北电子商城,企业做网站公司怎么做,天津网站建设 seo#x1f345; 点击文末小卡片 #xff0c;免费获取软件测试全套资料#xff0c;资料在手#xff0c;涨薪更快 今天呢#xff0c;笔者想和大家来聊聊pythonselenium的web自动化之元素的常用操作#xff0c;废话不多说直接进入主题吧#xff01;一、常用操作关键代码点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快今天呢笔者想和大家来聊聊pythonselenium的web自动化之元素的常用操作废话不多说直接进入主题吧一、常用操作关键代码点击ele.click()输入内容ele.send_keys(内容)清空内容ele.clear()获取文本内容ele.text获取属性值ele.get_attribute(属性名称)获取元素的宽高ele.sizesize和location一样都是实例属性返回都是字典格式获取元素的坐标ele.location元素坐标值是通过元素的最左上角相对浏览器内容区域的左上角来定位的# 定位元素 input_ele driver.find_element_by_id(kw) su_ele driver.find_element_by_id(su) # 获取元素的文本内容 input_ele.text # 获取元素的某个属性 input_ele.get_attribute(属性名称) # 输入内容 input_ele.send_keys(selenium) # 点击操作 su_ele.click() # 清空内容 input_ele.clear() # 获取元素的宽高 print(【百度一下】按钮的宽高{}.format(su_ele.size)) # 获取元素的x、y坐标值 print(【百度一下】按钮的坐标{}.format(su_ele.location))表单提交关键代码表单提交ele.submit()用于表单的提交也可以定位到具体提交按钮做一个点击的动作input_ele driver.find_element_by_id(kw) input_ele.submit() # 也可以实现回车检查元素关键代码是否可见ele.is_displayed()返回True可见反之不可见是否可点击ele.is_enabled()返回True可点击反之不可点击是否被选中ele.is_selected()返回True被选中反之未选中ele driver.find_element_by_id(xxxx) print(ele.is_displayed()) print(ele.is_enabled()) print(ele.is_selected())二、等待操作在web自动化中不得不提的元素等待操作我们在做功能测试中也会经常遇到页面元素未完全加载的情况需要等到元素出现后再进行操作。现在是代码代替人工去做这件事那自然也需要先等到元素加载完成才进行操作。当我们打开浏览器进入一个网页driver.get(网址)除了get()会自主强制等待网页加载完再进入下一个操作其他元素操作都不会自己等待页面加载完成因此在get()之后只要我们做的动作会让页面产生变化就要做一个等待动作以防元素未加载完成导致元素找不到报错因为代码运行的速度是非常快的。有三种等待方式一种强制等待两种智能等待隐性和显性。强制等待time.sleep(秒):表示让程序强制死等x秒无论发生什么都会在x秒之后再执行后续的代码import time time.sleep(2) # 强制等待10s隐性等待implicitly_wait(秒):设置最长等待时间在这个时间内只要有个时间点加载完成则执行下一步代码如果在这个时间内仍未完成就会抛出一个异常在这整个driver的会话周期内设置一次即可全局都可用。缺点程序会一直等待整个页面加载完成也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步但有时候页面想要的元素早就加载完成了但是因为个别js、图片之类的东西特别慢仍得等到页面全部完成才能执行下一步就会增加不必要的加载时间。from selenium import webdriver # 实例化chrome类 # 启动了Chromedriver并与Chromedriver开启了会话 driver webdriver.Chrome() driver.implicitly_wait(10) driver.get(https://www.baidu.com)显性等待关键代码WebDriverWait(driver, 等待时长, 轮循周期).until/until_not(判断条件)。使用WebDriverWait类和expected_conditions模块它会明确等到某个条件满足后再去执行下一步操作。它的等待机制是程序会每隔xx秒去寻找一遍如果条件成立则执行下一步否则以轮循的方式继续去寻找直到超过设置的最长时间然后抛出一个TimeoutException异常。WebDriverWait类显性等待类expected_conditions模块提供了一系列期望发生的条件如下title_is(title)判断当前页面的title是否等于预期title_contains(title)判断当前页面的title是否包含预期字符串presence_of_element_located(locator)判断某个元素是否存在dom树visiblilty_of_element_located(locator)判断某个元素是否可见visiblilty_of(element)跟上面的方法一样判断某个元素是否可见只是前者要传locator(定位器)后者直接传定位到的element就好了element_to_be_clickable(locator)判断某个元素是否可点击frame_to_be_available_and_switch_to_it(frame下标/name属性/webelement对象)判断该frame是否可以swtich进去可以则返回True并swtich进去否则返回False。alert_is_present()判断页面上是否存在alert以上是列举的部分条件类还有更多的方法有兴趣可以自行扩展。下面是其中一个方法示例import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # By模块封装了8大定位方法名 driver webdriver.Chrome() # driver.implicitly_wait(10) # 智能等待10秒 driver.get(http://www.baidu.com) driver.find_element_by_xpath(//div[idu1]//a[nametj_login]).click() # 定位表达式 loc (By.ID, TANGRAM__PSP_10__footerULoginBtn) # 实际是11这里改成10找不到会弹出报错 # 等待元素可见等待时间10秒轮循周期默认0.5秒一次 WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc)) # 操作满足条件之后的元素 driver.find_element(*loc).click() time.sleep(2) driver.quit()运行结果C:\software\python\python.exe D:/learn/test.py Traceback (most recent call last): File D:/learn/test.py, line 25, in module WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc)) File C:\software\python\lib\site-packages\selenium\webdriver\support\wait.py, line 80, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: Process finished with exit code 1知识点上面提到的定位器其实就是一个元组(定位方式, 定位表达式)By模块里封装了8大定位方法名跟我们之前的定位方式是一样的。不过要注意的是在使用find_element() 定位元素时不是传入一个元组定位方式和表达式是直接作为参数传入的因此上面的例子中会用到*解包。而find_element_by_id(属性值)之类的定位底层代码用的其实就是find_element()后者只要传对应定位方式的值前者则需要传定位方式、定位表达式。三、iframe切换iframeiframe就是一个网页里面嵌套了另外一个框架/页面即一个html页面中还内嵌了另一个html页面这个内嵌的html页面放在iframe/iframe标签对中。iframe也是html中的某一个元素里面放的是html页面。切换到iframe如果我们要操作的元素在内嵌的iframe页面中那么必须要从当前页面切换到iframe中然后再去iframe中的页面去操作元素。切换到iframe主要有以下两种方式方式一swtich_to.iframe()参数iframe的index下标/ iframe的name属性 / iframe的webelement对象# 切换到iframe 下标/name属性/webelement对象 driver.switch_to.iframe(login_frame_qq) driver.switch_to.iframe(0) driver.switch_to.iframe(dirver.find_element_by_tag_name(iframe))方式二EC.frame_to_be_available_and_switch_to_it()强烈推荐 等待和切换一次到位参数iframe的index下标/ iframe的name属性 / iframe的webelement对象等待条件此方法会判断iframe是否可用并且会自动切换到iframe中wait WebDriverWait(driver, 10) # 设置显性等待时间 # 设置等待条件此方法会判断iframe是否可用并且会自动切换到iframe中 wait.until(EC.frame_to_be_available_and_switch_to_it(login_frame_qq)) driver.find_element_by_id(switcher_plogin).click()切换到上层iframe关键代码driver.iframe_to.parent_frame()如果iframe中又内嵌了一个iframe那就只能在主html中一层一层地切进去。如果想返回上一层时也是一层一层地返回去。一般很少会返回去。切换到主html关键代码driver.swtich_to.default_content()切换到iframe之后本身在主html就变成了在切换后的内嵌html这时可以操作内嵌html的元素了如果想重新操作主html的元素就要先从iframe中回到主html。这里要注意不管你是在第几层的iframe中想切回到主html中都只需执行一次。例子import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 主html、内嵌html # 确定要操作的元素是否在iframe内 # 启动Chromedriver并与Chromedriver开启会话 driver webdriver.Chrome() driver.maximize_window() driver.get(http://xxxx.com/) driver.find_element_by_id(js_login).click() wait WebDriverWait(driver, 10) # 设置显性等待时间 qq_l (By.XPATH, //div[classcontent-btns]//a) wait.until(EC.visibility_of_element_located(qq_l)) # 设置显性等待条件 driver.find_element(*qq_l).click() # 设置等待条件此方法会判断iframe是否可用并且会自动切换到iframe中 wait.until(EC.frame_to_be_available_and_switch_to_it(login_frame_qq)) driver.find_element_by_id(switcher_plogin).click() driver.find_element_by_id(u).send_keys(test) driver.find_element_by_id(p).send_keys(test) driver.find_element_by_id(login_button).click() time.sleep(2) driver.quit() # 关闭浏览器kill掉chromedriver进程四、alert弹出框操作网页上的弹出框分两种一种是页面弹出框 这是一个html页面元素可见时是能定位到并进行操作的另一种则是alert弹出框这是是js里的alert弹框而selenium只能定位到html元素那么像这种alert弹出框如何处理呢既然是js那么我们就用js来处理。页面弹出框它是一个html页面元素只是需要由用户在页面的操作中触发弹出因此处理这种类型的弹出框一般分为两步第一步执行触发操作之后等待弹出框出现第二步定位弹出框中的元素并操作如百度登录的弹出框import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # By模块封装了8大定位方法名 driver webdriver.Chrome() driver.get(http://www.baidu.com) driver.find_element_by_xpath(//div[idu1]//a[nametj_login]).click() # 用户名登陆定位表达式 loc (By.ID, TANGRAM__PSP_11__footerULoginBtn) # 等待时间10秒轮循周期默认0.5秒一次 WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc)) # 操作满足条件之后的元素 driver.find_element(*loc).click() time.sleep(2) driver.quit()alert弹出框alert弹出框的处理方式第一步使用swtich_to.alert切换到弹出框建议先使用显性等待EC.alert_is_present()判断弹出框是否可见或者强制等待0.5stime.sleep(0.5)第二步使用Alert类提供的一系列操作方法对弹窗进行操作accept() 是dismiss() 否Send_keys() 往弹出框里输入文本text() 获取弹框里的内容import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 启动Chromedriver并与Chromedriver开启会话 driver webdriver.Chrome() driver.maximize_window() driver.get(https://www.w3school.com.cn/tiy/t.asp?fjs_alert) wait WebDriverWait(driver, 10) wait.until(EC.frame_to_be_available_and_switch_to_it(iframeResult)) # 触发alert弹框 driver.find_element_by_xpath(//button[text()试一试]).click() wait.until(EC.alert_is_present()) time.sleep(3) # 这里是为了看下效果 alert driver.switch_to.alert # Alert类的实例化切换到alert alert.accept() # 是 # dismiss() 否 # text() 获取弹框里的内容 # Send_keys() 往弹出框里输入文本 driver.quit()五、总结最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。