首页 > 编程语言 >肖sir__ python自动化之selenium9.1

肖sir__ python自动化之selenium9.1

时间:2024-03-29 15:15:10浏览次数:23  
标签:__ sir webdriver selenium9.1 driver element sleep id find

python+selenium

selenium是一个第三方库,python有很多库;

1、什么是ui自动化?

通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。

2、ui自动化的有点?

(1)解决重复性的功能测试和验证

(2)减少测试人员在回归测试时用例漏测和验证点的漏测

(3)减少冒烟测试,回归测试的人力成本,节省时间,提高测试效率

3、ui自动化缺点?

(1)需求不稳定,比如,敏捷开发速度快,ui频繁变革,定位不稳定,提高了用例维护的成功

(2)用例熟料的覆盖率,占用例总数的20%-30%

(3)场景覆盖占当前功能场景78%-80%

4、ui自动化和功能测试那个更重要?

都重要

原因:(1)功能测试是基础,在熟悉功能的前提下才能做好ui自动化

 

 

 

 

 

 安装方法1:

1、安装selenium命令

  pip  install    selenium  (python3中pip.exe默认在python的Scripts路径下)

2、可使用以下命令查看是否安装成功:

 pip   show   selenium

安装方法2:

 

 

 3、直接把site--packages.rar包      selenium放进去

 

4、pycharm安装selenium

--------------------------------------------------------------------------

注意点:

1、如果安装报错:pip版本太低

解决方案:升级pip直接输入 : python -m pip install --upgrade pip

2、记得配置pip环境变量

3、安装出现pip 安装不是内部命令

解决:安装环境变量的问题,

---------------------------------------------------------------------------------------

1、谷歌驱动:放在C:\python37\Scripts  下面

 对应版本镜像链接:的http://npm.taobao.org/mirrors/chromedriver/

-------------------------------------------------------------------------------------------

调用语句格式:

第一步:导入  from      selenium   import      webdriver 

第二步:创建一个driver对象来打开浏览器,对浏览器实现操作

driver = webdriver.Chrome()

第三步:通过对象谷歌浏览器且输入网址,在用get方法来打开一个网站的url

driver.get('http://gz.duoceshi.cn')

 ------------------------------------------------------------------------------------------

打开页面方法:

方法一:格式 driver.get( " url")

场景1:driver.get("www.baidu.com")

方法二: 格式:driver.execute_script("window.open('url')")

场景1:driver.execute_script("window.open('http://www.jd.com')")
场景2:和场景1一样的
window='window.open("http://www.jd.com")'#可以通过变量来接收
driver.execute_script(window)#执行脚本

拓展知识:

window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+

格式:window.open(pageURL,name,parameters) 

 pageURL 为子窗口路径 ,name 为子窗口句柄,parameters 为窗口参数(各参数用逗号分隔) 

 ------------------------------------------------------------------------------------------

常用的定位语法:(详解:https://i.cnblogs.com/posts/edit;postId=13666634)

1、时间等待中的三种

1.1强制等待 sleep(xx)                    例如:time.sleep(10)

1.2.隐性等待 implicitly_wait(xx)           例如:driver.implicitly_wait(10)

1.3.显性等待 WebDriverWait

2、drivere.refresh(  )   页面刷新

3、3.1driver.back( )  #返回上一页

3.2 driver.forward(   )#切换到下一页

4、切换窗口

5、driver.set_window_size(  530,960)  #设置指定窗口的大小

6、driver.maxmize_window( ) #窗口最大化

7、driver.get_screenshot_as_file(保存路径,图片名称)     截屏

8、退出的两种方式:一种是close  ,另一种:quit

-------------------------------------------------------------------------------------------

 

 

 

场景1:id 定位,比如定位百度的输入框

格式:driver.find_element_by_id('id值')

1 2 3 from selenium import webdriver driver=webdriver.Chrome() driver.get("http://www.baidu.com")driver.find_element_by_id('kw'#定位iddriver.find_element_by_id("kw").send_keys("我是name定位")  

 场景2:name定位方法,比如百度输入框中找name

格式:driver.find_element_by_name("name值")

复制代码
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd")
time.sleep(3)
driver.find_element_by_name("wd").send_keys("杭州dcs")
复制代码

场景3:class定位,以百度中class为例

格式:driver.find_element_by_class_name('class值')

1 2 3 4 5 from selenium import webdriver import time driver=webdriver.Chrome() driver.get("http://www.baidu.com") driver.find_element_by_class_name('s_ipt').send_keys("class定位")  

场景4:link_text定位     #使用click()点击方法   准确的匹配

格式:driver.find_element_by_link_text('值').click()

1 2 3 4 from selenium import webdriver driver=webdriver.Chrome() driver.get('http://www.baidu.com') driver.find_element_by_link_text('hao123').click()  

场景5:partial_link_text  模糊定位

格式:driver.find_element_by_partial_link_text('模糊值').click() 

1 2 3 4 from selenium import webdriver driver=webdriver.Chrome() driver.get('http://www.baidu.com') driver.find_element_by_partial_link_text('ao').click()  

 场景6:javascript 定位

格式:driver.execute_script('document.getElementById("id值").value="输入的值"')

1 2 3 4 5 6 from selenium import webdriver from time import sleep driver=webdriver.Chrome() driver.get('http://www.baidu.com') js ='document.getElementById("kw").value="js定位方法"' driver.execute_script(js)  

拓展知识:(不讲解)

1 2 3 4 5 id定位:document.getElementById() name定位:document.getElementsByName() tag定位:document.getElementsByTagName() class定位:document.getElementsByClassName() css定位:document.querySelectorAll()

 场景7:tag_naem定位(标签定位)

格式:drvier.find_elements_by_tag_name('input')

1 2 3 4 5 6 7 8 9 # from selenium import webdriver # import time # driver=webdriver.Chrome() # driver.get("http://www.baidu.com") inputs =drvier.find_elements_by_tag_name('input') # # 通过elements来找到当前百度中所有的input标签 for in inputs: #遍历input标签      if i.get_attribute('name')=='wd':         i.send_keys('多测师name') 

-------------------------------------------------------------------------------------------------------------------

 场景8:xpath定位 (详解)

格式:driver.find_element_by_xpath(xpath表达式)

两个定位:

1、绝对定位:

特点:1.以单斜杠/开头;2.从页面根元素(HTML标签)开始,严格按照元素在HTML页面中的位置和顺序向下查找

 

2、相对定位:(我们一般都是用相对定位来定位的)

特点:1.以双斜杠//开头;2.不考虑元素在页面当中的绝对路径和位置;3.只考虑是否存在符合表达式的元素即可。

2.1使用标签名+节点属性定位

语法://标签名[@属性名=属性值]

1 2 3 ##from://*[@id="form"] #span://*[@id="form"]/span[1] #   //*[@id="kw"] #'''xpath定位的写法'''<br># # 找父级的方法(通过标签找到指定定位的元素)<br># # 当前输入框的标签是:input标签-我要定位的地址在这个地址中输入文本<br># # input标签的上一级是:span标签<br># # 当找父级无法找到的时候:找父级的爷爷级# xpath=driver.find_element_by_xpath('//*[@id="form"]/span/input')<br># xpath.send_keys('根据层级查找定位')<br>#xpath=driver.find_element_by_xpath('//*[@id="form"]/span[1]/a[1]')<br># xpath.send_keys('多测师!!!')<br><br>索引值从1开始,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # from selenium import webdriver<br># from time import sleep #导入time模块引用sleep线程等待<br># driver=webdriver.Chrome() #创建一个对象公司用谷歌那么就调用谷歌浏览器<br># url='http://www.baidu.com' # 测试环境地址<br># driver.get(url) #通过谷歌浏览器打开百度网站<br># driver.maximize_window() #窗口最大化<br># sleep(2) #线程等待#直接复制的方法 xpath=drvier.find_element_by_xpath('//*[@id="kw"]') xpath.send_keys('直接id复制是xpath') # 直接手写且引用当前标签中已有的元素 # 引用:id 除了xpath元素中必须要添加单或者双引号其它都不需要 xpath =drvier.find_element_by_xpath('//*[@id="kw"]') xpath.send_keys('直接id复制是xpath') # 通过标签名称来 xpath =drvier.find_element_by_xpath('//input[@id="kw"]') xpath.send_keys('通过input标签名') # 通过name元素来实现 xpath =drvier.find_element_by_xpath('//*[@name="wd"]') xpath.send_keys('xpath中name定位') # 通过class元素来定位 xpath=drvier.find_element_by_xpath('//*[@class="s_ipt"]') xpath.send_keys('xpath中class元素定位!') # 通过:autocomplete="off"元素来定位 xpath=drvier.find_element_by_xpath('//*[@autocomplete="off"]') xpath.send_keys('xpath中其他属性定位') # 通过and来实现定位 xpath=drvier.find_element_by_xpath('//*[@name="wd" and @class="s_ipt"]') xpath.send_keys('多个组合属性定位xpath')

-----------------------------------------------------------------------------------------------------------------------

场景9:css定位(详解)

格式:driver.find_element_by_css_selector('值')

9.1场景css中使用

复制代码
from selenium import webdriver
from time import sleep #导入time模块引用sleep线程等待
driver=webdriver.Chrome() #创建一个对象公司用谷歌那么就调用谷歌浏览器
url='http://www.baidu.com' # 测试环境地址
driver.get(url) #通过谷歌浏览器打开百度网站
driver.maximize_window() #窗口最大化
sleep(2) #线程等待
复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # 9.1.1:id 定位 # driver.find_element_by_css_selector('#kw').send_keys('我是css中的id加#') #注意点:id前加#号9.1.1 id中直接使用id值(#) # driver.find_element_by_css_selector('[id="kw"]').send_keys('我是css中的id和值 ') #9.1.2  id中直接使用id值 # driver.find_element_by_css_selector('[id="kw"]').send_keys('我是css中的id和值 ') # 9.2.1:class 定位  #注意点:class前加上.(点号) # driver.find_element_by_css_selector('.s_ipt').send_keys('我是css中的class')  # 9.2.2 # css =driver.find_element_by_css_selector('[class=s_ipt]') # css.send_keys('多测师!!') # 9.3:nane定位 # driver.find_element_by_css_selector('[name="wd"]').send_keys('我是css中的name') #二:组合属性定位 #9.4:id组合属性定位 # driver.find_element_by_css_selector("input#kw").send_keys('我是css组合id') #9.5:class组合属性定位 #driver.find_element_by_css_selector("input.s_ipt").send_keys('我是css组合class') # #9.6:其他属性组合定位 #driver.find_element_by_css_selector("input[name='wd']").send_keys('我是css组合name') # #9.7:仅有属性名,没有值也可以 #driver.find_element_by_css_selector("input[id]").send_keys('我是css仅有属性名') # #9.8:两个其他属性组合定位 #driver.find_element_by_css_selector("[name='wd'][autocomplete='off']") .send_keys('我是css有两个属性')  9.9:其他属性定位css=driver.find_element_by_css_selector('[autocomplete=off]')<br>css.send_keys('其他属性定位')#~表示值由多个空格隔开,匹配属其中一个值的方法<br># css =driver.find_element_by_css_selector('[id ~=kw]')<br># css.send_keys('有~ 多个空格只匹配一个kw')<br># #^表示匹配属性值字符开头的方法<br># css =driver.find_element_by_css_selector('[id ^=kw]')<br># css.send_keys('开头是kw')<br># #$表示匹配属性值字符结尾的方法<br># css =driver.find_element_by_css_selector('[id $=kw]')#<br># css.send_keys('结尾位kw')<br># css =driver.find_element_by_css_selector('span>input')#<br># # css.send_keys('找上级定位')<br># css =driver.find_element_by_css_selector('form>span>input')#<br># css.send_keys('找上上级定位')
 

 

拓展知识:(不讲解)

elements是复数,返回的是一个列表

1 2 3 4 5 6 7 8 0.id复数定位find_elements_by_id(self, id_) 1.name复数定位find_elements_by_name(self, name) 2.class复数定位find_elements_by_class_name(self, name) 3.tag复数定位find_elements_by_tag_name(self, name) 4.link复数定位find_elements_by_link_text(self, text) 5.partial_link复数定位find_elements_by_partial_link_text(self, link_text) 6.xpath复数定位find_elements_by_xpath(self, xpath) 7.css复数定位find_elements_by_css_selector(self, css_selector

方法一:driver.find_elements("css selector", ".mnav")[5].click()

方法二:driver.find_elements_by_class_name("mnav")[5].click()

注意从索引0开始

----------------------------------------------------------------------------------------------------------------------

 

1 2 3 4 5 6 7 8 9 10 11 成功登陆cms案例(输入账号,输入密码,点击登陆)<br>from  selenium  import webdriver from time  import  sleep driver=webdriver.Chrome() url="http://cms.duoceshi.cn/cms/manage/login.do" driver.get(url) sleep(3) driver.find_element_by_id("userAccount").send_keys("admin") sleep(3) driver.find_element_by_id("loginPwd").send_keys("123456") sleep(2) driver.find_element_by_id("loginBtn").click()

 

1 2 3 4 5 6 7 8 9 10 案例场景一定位:百度输入框和百度按钮<br>from  selenium  import webdriver from time  import  sleep driver=webdriver.Chrome() url="http://www.baidu.com" driver.get(url) sleep(3) driver.find_element_by_class_name("s_ipt").send_keys("杭州多测师教育科技有限公司") driver.maximize_window() sleep(3) driver.find_element_by_id("su").click()案例场景二定位:百度中的hao123 链接按钮from  selenium  import webdriver<br>from time  import  sleep<br>driver=webdriver.Chrome()<br>url="http://www.baidu.com"<br>driver.get(url)<br>sleep(3)<br>driver.find_element_by_link_text("hao123").click()

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 按钮*****<br>from selenium.webdriver.common.action_chains import ActionChains<br>场景一:from selenium import webdriver from time import sleep driver=webdriver.Chrome() from selenium.webdriver.common.action_chains import ActionChains #类 driver.get('https://www.baidu.com/') driver.maximize_window() driver.implicitly_wait(10) #第一种方法直接定位 driver.find_element_by_id('s-usersetting-top').click() sleep(2) driver.find_element_by_link_text('搜索设置').click() driver.find_element_by_link_text('隐私设置').click() # # # 第二种通过:ActionChains类来模拟鼠标点击悬停 sleep(4) =driver.find_element_by_id('s-usersetting-top') ActionChains(driver).move_to_element(d).perform() ''' ActionChains()括号中接当前浏览器对象 move_to_element()括号中接当前你要模拟悬停的具体元素位置 .perform()对当前的位置进行点击悬停(类似于鼠标放在上面的动作)'''sleep(4)<br>driver.find_element_by_link_text('搜索设置').click()
 

拓展知识:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ActionChains类(鼠标操作) 常用于模拟鼠标的行为,比如单击、双击、拖拽等行为        click(on_element=None)     --- 鼠标单击        double_click(on_element=None)    ---  双击              context_click(on_element=None)   ---  右击              click_and_hold(on_element=None)   ---  鼠标单击并且按住不放        drag_and_drop(source,target)   ---  拖拽        drag_and_drop_by_offset(source,xoffset,yoffset)   ---  将目标拖动到指定的位置        key_down(value,element=None)  ---  按下某个键盘上的键        key_up(value,element=None)   ---  松开某个键        move_by_offset(xoffset,yoffset)   ---  鼠标从当前位置移动到某个坐标        move_to_element(to_element)   ---  鼠标移动到某个元素        move_to_element_with_offset(to_element,xoffset,yoffset)   ---  移动到距某个元素(左上角坐标)多少距离的位置        perform()    ---  执行链中的所有动作        release(on_element=None)   ---  在某个元素位置松开鼠标左

 

1 2 3 4 5 6 7 8 9 10 11 from selenium import webdriver from time import sleep driver=webdriver.Chrome() driver.get('http://www.baidu.com') driver.maximize_window() sleep(2) xp=driver.find_element_by_xpath('//*[@id="u1"]/a').text if xp=='登录':     print('OK') else:     print('NO')

  

 

1 2 3 4 5 6 7 8 9 10 作用:判断表达式的条件成不成立,如果不成立就会立刻返回错误,而不用等到程序执行完成崩溃后,<br>其相当于if not 表达式<br><br>assert()方法,断言成功,则程序继续执行,断言失败,则程序报<br>案例一: from selenium import webdriver driver=webdriver.Chrome() driver.get('https://www.baidu.com/') print(driver.title)<br>案例二:a = 5 assert (a>1) print("断言成功,程序继续进行")   assert (a>7) print("断言失败,程序报错")

 assert*****

 

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 from selenium import webdriver from selenium.webdriver.support.ui import Select#导入类 from time import sleep driver=webdriver.Chrome() url ='https://www.ctrip.com/?sid=155952&allianceid=4897&ouid=index' driver.get(url) driver.maximize_window() #窗口最大化 sleep(8) # 定位下拉选择框 =driver.find_element_by_id('J_roomCountList'#找到当前下拉框的位置 # Select(s).select_by_index(5) #通过索引来定位下拉值,从0开始 # Select(s).select_by_value('6') #通过value来找到对应的值 Select(s).select_by_visible_text('6间'#通过文本值<br><br>备注:索引值从0开始  

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 # #alert 弹框 # from selenium import webdriver # from time import sleep # drvier=webdriver.Chrome() # url=r'F:\dcs\DCS课程安排\second\第二个月课程\第14天:selenium+python(2)/alert弹框.html' # drvier.get(url) # drvier.maximize_window() # sleep(4) # # 如当前的弹框是alert弹框那么需要切换进入到这个弹框才能够进行点击确定取消 # alert =drvier.switch_to.alert # alert.text # # # alert.accept() #点击确定 # sleep(3) # alert.dismiss() #点击取消   # #enter 弹框 # from selenium import webdriver # from time import sleep # drvier=webdriver.Chrome() # url='file:///F:\dcs\DCS课程安排\second\第二个月课程\第14天:selenium+python(2)/enter.html ' # drvier.get(url) # drvier.maximize_window() # sleep(2) # # enter弹框: # drvier.find_element_by_class_name('alert').click() #点击确认框 # sleep(2) # atl =drvier.switch_to.alert #切换进入到弹框中 # #atl.accept() #点击确定按钮 # atl.dismiss() #点击取消按钮   # #输入性弹框 # from selenium import webdriver # from time import sleep # drvier=webdriver.Chrome() # url='file:///F:\dcs\DCS课程安排\second\第二个月课程\第14天:selenium+python(2)/prompt.html' # drvier.get(url) # drvier.maximize_window() # sleep(2) # # 输入性弹框: # drvier.find_element_by_class_name('alert').click()#点击确定按钮 # sleep(2) # alt=drvier.switch_to.alert #切换进入到 alert弹框中 # alt.send_keys('http://www.baidu.com') #输入值 # sleep(4) # alt.accept()#点击确定 # alt.dismiss() #点击取消

  

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 from selenium import webdriver from time import sleep driver=webdriver.Chrome() url='https://www.jd.com/' driver.get(url) driver.maximize_window() sleep(4) # 登录京东商城 driver.find_element_by_link_text('你好,请登录').click() #点击登录 sleep(2) driver.find_element_by_class_name('QQ-icon').click() #点击QQ头标 # iframe框定位: # 注意:有些元素如果换了多种方法都无法定位,且元素正常,首先判断一下 # 你当前定位的位置是否是有iframe,如何查找:从当前元素往上找 # 通过元素定位iframe,如何切换进入当前元素对应的iframe框 # 第一种方法 ifrme =driver.find_element_by_id('ptlogin_iframe'#当前iframe的位置  # # 进入到iframe框中 driver.switch_to.frame(ifrme) # # # 通过switch_to.frame 切换进入到当前的iframe框中 # # # 第二种方法:通过索引来切换 # drvier.switch_to.frame(0) #通过索引值为0的iframe来实现进入iframe框 # # 第三种方法:通过tag_name # drvier.switch_to.frame(drvier.find_element_by_tag_name('iframe')) #drvier.find_element_by_id('img_out_812462278').click() driver.switch_to.default_content()  #退出弹框 sleep(4) driver.find_element_by_link_text('QQ登录服务协议').click()     #什么是QQ登录 #/html/body/div[1]/div/div/a[1]   #退出弹框 # from selenium import webdriver # from time import sleep # driver=webdriver.Chrome() # 使用iframe定位后需退出iframe # # 退出iframe,再操作 # driver.switch_to_default_content() # 回到主页面   #当frame不存在id或者class时,可以用xpath的方式进行定位 # iframe = find_element_by_xpath("//div/iframe") # switch_to_frame(iframe)     #退出iframe: # # # 第一种方式:跳出所有iframe,回到主界面 # driver.switch_to_default_content() # # # 第二种方式:回到f1(返回上一级) # driver.switch_to.parent_frame()<br>图例:<br>  

 

 

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 场景一:<br>from selenium import webdriver from time import sleep drvier=webdriver.Chrome() drvier.get('http://www.jd.com') drvier.maximize_window() sleep(4) # # 滚动条定位 ='window.scrollTo(0,10000)' # # 0表示为顶端,1000表示从顶端往下滑动的距离 # # (距离没有参考自己把握) drvier.execute_script(j) sleep(2) ='window.scrollTo(0,0)' #返回顶端 drvier.execute_script(j) # 通过java语法:var设置变量的方法 # js='var d=document.documentElement.scrollTop=1000' # drvier.execute_script(js) # sleep(2) # js='var d=document.documentElement.scrollTop=0' # drvier.execute_script(js)<br>场景二: '''先把上面的滑动语法吸收:<br># 根据我们之前所学的Python 来实现自动增加的滑动<br>#  设置一个值为:5000  从0开始依次加1000 当满足5000的时候终止<br># from selenium import webdriver<br># from time import sleep<br># drvier=webdriver.Chrome()<br># drvier.get('http://www.jd.com')<br># drvier.maximize_window()<br># drvier.implicitly_wait(20)<br># n =0<br># while n<=5000:<br>#     n+=1000<br>#     js='var d=document.documentElement.scrollTop='+str(n)<br>#     drvier.execute_script(js)<br>#     sleep(2)<br><br>

  

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 场景二:模拟键盘操作 from selenium.webdriver.common.keys import Keys #导入Keys类) from selenium import webdriver import time from selenium.webdriver.common.keys import Keys #导入Keys类 driver=webdriver.Chrome() url='http://www.baidu.com' driver.get(url) driver.maximize_window() time.sleep(4) # Keys:模拟我们电脑的键盘操作(快捷键,全部选择,剪切,粘贴,空格,回车。。。) driver.find_element_by_id('kw').send_keys('duoceshi') time.sleep(3) # # control+a全部选择 driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a') time.sleep(3) # control+x剪切 driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x') time.sleep(3) # control+v粘贴 driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v') # enter回车 driver.find_element_by_id('kw').send_keys(Keys.ENTER) # 把以上的代码进行通过函数来封装 # def fun(a,*c): #定义一个函数

  

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ''' 练习: 1、将论坛的登录还有点击模块管理 通过类来进行封装(给实参) 2、将论坛的登录还有点击模块管理 用例封装(给形参)且通过类的传递完成调用   加一个断言  ''' # from selenium import webdriver # from time import sleep # class Discuz: #定义一个类 #     def __init__(self): #         self.drvier=webdriver.Chrome() #         self.drvier.get('http://192.168.254.129/bbs/forum.php') #         self.drvier.maximize_window() #         self.drvier.implicitly_wait(10) #     def login(self,name,pwd): #登录模块 #         self.drvier.find_element_by_id('ls_username').send_keys(name) #         self.drvier.find_element_by_id('ls_password').send_keys(pwd) #         sleep(2) #         self.drvier.find_element_by_css_selector('.pn').click() #     def mk_login(self): #模块管理 #         self.login('admin','123456') #         self.drvier.find_element_by_link_text('模块管理').click() #         sleep(2) #         title=self.drvier.title #         # print(title) #         if title=='门户 - Discuz! Board - Powered by Discuz!': #             print('模块管理中心OK') #模块管理中心OK #         else: #             print('NO') #         sleep(4) #         self.drvier.close() # if __name__ == '__main__': #     D=Discuz() #     # D.login() #     D.mk_login()

标签:__,sir,webdriver,selenium9.1,driver,element,sleep,id,find
From: https://www.cnblogs.com/xiaolehong/p/18103881

相关文章

  • 原语笔记:BuF系列
    参考:UG472UG953UG768BUFGPrimitive:GlobalClockSimpleBuffer介绍:该设计元素是一个高扇出缓冲器,它将信号连接到全局布线资源,以实现信号的低偏斜分布。BUFG通常用在时钟网络以及其他高扇出网络(例如设置/重置和时钟使能)上。简介:全局缓冲,BUFG的输出到达FPGA内部的I......
  • router-link (3) pigx单体 路由跳转
    1.src/router下route.ts加入前端静态路由dynamicRoutes:这里是跳转后带菜单的 { path:'/pro/proProjectTaskAcceptance/index.vue', name:'项目验收', component:()=>import('/@/views/pro/proProjectTaskAcceptance/index.vue'), meta:{ i......
  • VKL144A/B TSSOP48/QFP48L-点阵式液晶驱动芯片/低电流LCD驱动,36×4段技术支持
    产品品牌:永嘉微电/VINKA产品型号:VKL144A/B封装形式:TSSOP48/QFN48L概述:VKL144A/BTSSOP48/QFN48L是一个点阵式存储映射的LCD驱动器,可支持最大144点(36SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,可配置4种功耗模式,也可通过关显示和关振荡器进入省电模式......
  • Windows 安装 Podman Desktop
    简介: Podman(PODMANager)是一个用于管理容器和映像、挂载到这些容器中的卷以及由容器组组成的pod的工具。Podman在Linux上运行容器,但也可以使用Podman管理的虚拟机在Mac和Windows系统上使用。Podman基于libpod,libpod是一个用于容器生命周期管理的库,也包含在此存储......
  • K线形态汇总
    ......
  • 无人车网关案例:记SV900无人清扫车网关的现场应用
    ​随着无人驾驶技术的不断发展,无人车辆已经开始广泛应用于物流配送、环境保洁、巡逻监控等众多领域,助力城市运营更加高效智能。而要实现无人车辆的安全可靠运行,关键在于选择一款性能卓越的车载网络通信系统.在这一背景下,星创易联推出了SV900无人车网关系列产品。它集5G/4G网络......
  • Linux基础命令
    Linux基础命令目录Linux基础命令一、Linux的优势二、Shell1.Shell的概念2.Shell的内、外部命令三、目录结构四、命令简述1.命令行格式2.编辑命令行的辅助操作3.获得命令帮助的方法4.通配符5.别名:alias6.pwd(printworkdirectory)7.切换工作目录:cd8.ls命令9.复制:CP10.创建文件......
  • 如何在Java中读取超过内存大小的文件
    读取文件内容,然后进行处理,在Java中我们通常利用Files类中的方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大。此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需的数据。接下来,我们就来......
  • 山东大学23强基班计算机导论第四次习题答案
    T7.1#include<iostream>usingnamespacestd;intmain(){intlower,upper;cin>>lower>>upper;if(lower>upper||upper>100||lower<=0){cout<<"Invalid.";return0;}......
  • Qt QByteArray中存储的字节顺序转换
    在QByteArray中,可以使用Qt的函数来实现字节顺序的转换。具体而言,可以使用 qFromBigEndian 和 qFromLittleEndian 函数将大端和小端字节顺序的数据转换为主机字节顺序的数据。同样地,可以使用 qToBigEndian 和 qToLittleEndian 函数将主机字节顺序的数据转换为大端......