推广 热搜:   公司  快速  中国  企业    行业  设备  上海  未来 

[184]selenium的一些使用方法

   日期:2025-01-03     移动:http://keair.bhha.com.cn/mobile/quote/6057.html

selenium.webdriver提供了所有WebDriver的实现,目前支持FireFox、phantomjs、Chrome、Ie和Remote

[184]selenium的一些使用方法

安装seleniun

 

新建实例driver = webdriver.Chrome()

通过标签属性Id查找元素

方法:find_element_by_id(element_id)
实例:driver.find_element_by_id(“iptUsername”)

 
通过标签属性name查找元素

方法:find_element_by_name(element_name)
实例:driver.find_element_by_name(“inputPwname”)

 
通过标签Xpath路径查找元素

方法:find_element_by_xpath(xpath)
实例

 
通过标签名tagname查找元素

方法:find_element_by_tag_name(tag_name)
实例:driver.find_element_by_tag_name(“input”)
注意:通过tag_name查找时使用find_element_by_tag_name查找到的是第一个标签的tag_name

 
返回元素的tagName

方法:tag_name
实例:driver.find_element_by_id(“iptUsername”).tag_name

通过标签中的元素文本链接查找元素

方法:find_element_by_link_text(link_text)
实例:driver.find_element_by_link_text(‘登 录’)

 
通过查找部分链接文件匹配元素
 

实现

 
通过标签的class属性查找元素

方法:find_elements_by_class_name(class_name)
实例:driver.find_elements_by_class_name(“x-panel-body”)

 
通过css样式查找元素

方法:find_element_by_css_selector()
实例:driver.find_element_by_css_selector(“input.btn”)
温馨提示:find_elements_by_css_selector()查询到的是一个集合,如果id名字重复的时候可以采取find_elements_by_id(),其他的查询方式同理

通过CSS的定位策略。默认情况下本机浏览器支持CSS定位,所以,请参考W3C CSS选择器http://www.w3.org/TR/CSS/#selectors显示一般可用的CSS选择器的列表。如果浏览器没有原生支持CSS查询,可以使用Sizzle(Sizzle是一个纯javascript CSS选择器引擎)。目前,IE 6,7和FF3.0使用Sizzle的CSS查询引擎。

注意:不是所有浏览器对CSS的支持都是一样的,可能在一个浏览器中运行良好,切换到另一个浏览器则不然。

 

不同驱动的支持

在高的级别上,尽可能的使用一个浏览器原生的webdriver XPath 的功能。在一些没有本地的XPath支持的浏览器,我们已经提供了我们自己的实现。这可能会导致一些意想不到的行为,除非你知道各种XPath引擎的差异。

驱动标签和属性名称属性值本地的XPath支持HtmlUnit Driver小写当他们出现在HTML是Internet Explorer Driver小写当他们出现在HTML没有Firefox Driver不区分大小写当他们出现在HTML是

这点抽象,对于下面这段HTML 代码来说

 

不同驱动对大小写的支持

XPath expressionHtmlUnit DriverFirefox DriverInternet Explorer Driver//input1 (“example”)22//INPUT020

HTML元素有时并不需要显式地声明,因为他们默认为已知值的属性。例如,“input”的标签并不需要的“type”属性,因为它默认为“text”。webdriver使用XPath时,你不应该期望能够对这些隐含的属性相匹配。

返回当前会话中的cookies

方法:get_cookies()
实例:driver.get_cookies()

根据cookie name 查找

方法:driver.get_cookie(cookie_name)
实例:driver.get_cookie(“NET_SessionId”)

删除浏览器所有的cookies

方法:delete_all_cookies()
实例:driver.delete_all_cookies()

删除指定的cookie

方法:delete_cookie(name)
实例:deriver.delete_cookie(“my_cookie_name”)

例子

 
 
**获取当前窗

口的坐标**
方法:get_window_position()
实例:driver.get_window_position()

获取当前窗口的长和宽

方法:get_window_size()
实例:driver.get_window_size()

获取元素坐标

方法:location
解释:首先查找到你要获取元素的,然后调用location方法
实例

返回元素的大小

方法:size
实例:driver.find_element_by_id(“iptPassword”).size
返回值:{‘width’: 250, ‘height’: 30}

获取CSS的属性值

方法:value_of_css_property(css_name)
实例

  • 获取元素的属性值
    方法:get_attribute(element_name)
    实例
获取标签中的文本值

获取元素的文本值

方法:text
实例:driver.find_element_by_id(“iptUsername”).text

有些时候,我们需要再页面上模拟一些鼠标操作,比如双击、右击、拖拽甚至按住不动等,我们可以通过导入 ActionChains 类来做到

 
 
表单的提交

方法:submit
解释:查找到表单(from)直接调用submit即可
实例:driver.find_element_by_id(“form1”).submit()

我们已经知道了怎样向文本框中输入文字,但是有时候我们会碰到标签的下拉框。直接点击下拉框中的选项不一定可行。

 

Selenium 专门提供了 Select 类来处理下拉框。

其实 WebDriver 中提供了一个叫 Select 的方法,可以帮助我们完成这些事情

 

以上是三种选择下拉框的方式,它可以根据索引来选择,可以根据值来选择,可以根据文字来选择。注意

 

用户输入-填写表单

我们已经看到了如何将文字输入到一个文本或文本字段,但其他元素?您可以“切换”复选框的状态,你可以使用“点击”设置类似选择的选项标记。处理SELECT标签是不是太糟糕

 

找到页面上第一个“select”的元素,并通过每个选项依次循环,打印出它们的值。你会发现,这不是最有效处理SELECT元素的方式。在webdriver的支持类中,有一个名为“select”,它提供了一些有用的方法,来处理这些交互。

 

从页面上第一个选择开始取消所有选项,从第一个选择页面上的所有选项,然后选择显示的文本与“Edam” 的选项。

当你完成填写表格,你可能要提交。我们需要找到“提交”按钮,然后单击它

 

另外,有方便的方法可以在webdriver的每个元素上的“提交”。如果调用此表单内的元素,webdriver通过的DOM按顺序找到封闭的形式,然后调用该提交。如果该元素不是一种形式,那么会抛出NoSuchElementException异常

 
 

如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难

如果因为在加载某个元素时延迟而造成ElementNotVisibleException(不可见元素异常)的情况出现,那么就会降低自动化脚本的稳定性,设置元素等待可改善这种问题造成的不稳定。

Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。

隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。

显式等待

显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。

 

如果不写参数,程序默认会 0.5s 调用一次来查看元素是否已经生成,如果本来元素就是存在的,那么会立即返回。

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions).until()

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔(步长)时间,默认为0.5S
  • ignored_exceptions:超时后的异常信息,默认情况下NoSuchElementException

WebDriverWait()一般由until()或until_not()方法配合使用,下面是方法说明

  • until(method,message=’’):调用该方法提供的驱动程序作为一个参数,直到返回值为True
  • until_not(method,message=’’):调用该方法提供的驱动程序作为一个参数,直到返回值为False
  • presence_of_all_elements_located():判断元素是否存在

下面是一些内置的等待条件,你可以直接调用这些条件,而不用自己写某些等待条件了。

title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present

隐式等待

方法:implicitly_wait(wait_time)
实例:driver.implicitly_wait(30)

通过一定的时长等待页面上某元素加载完成,如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常,WebDriver

隐式等待比较简单,提供了implicitly_wait()方法来实现隐式等待,默认设置为0,单位为秒。

 
sleep休眠方法

在脚本执行中固定休眠

 
 
浏览器中加载url

方法:get(url)
实例:driver.get(“http//:www.baidu.com”)

获取当前页面的Url函数

方法:current_url
实例:driver.current_url

获取当前页面的html

实例:driver.page_source

获取某个元素的html信息

page_source属性,但是那个是获取整个网页的html而不是元素的html
通过 get_attribute(‘innerHTML’)的方式可以获取某个元素的html信息
实例:driver.find_element_by_id(‘tb-37327761306’).get_attribute(‘innerHTML’)

关闭页面

方法:close()
实例:driver.close()

close()方法只是关闭页面,但如果只有一个页面被打开,close()方法同样会退出浏览器

关闭浏览器并且推出驱动程序

方法:quit()
实例:driver.quit()

浏览器窗口最大化

方法:maximize_window()
实例:driver.maximize_window()

查看浏览器的名字

方法:name
实例:drvier.name

向前

方法:forward()
实例:driver.forward()

返回上一页

方法:back()
实例:driver.back()

截取当前页面

方法:get_screenshot_as_file(filename)
实例:driver.get_screenshot_as_file(“D:Program FilesPython27NM.bmp”)

判断元素是否被选中

方法:is_selected()
实例:driver.find_element_by_id(“form1”).is_selected()

判断元素是否显示

方法:is_displayed()
实例:driver.find_element_by_id(“iptPassword”).is_displayed()

判断元素是否被使用

方法:is_enabled()
实例:driver.find_element_by_id(“iptPassword”).is_enabled()

元素赋值

方法:send_keys(*values)
实例:driver.find_element_by_id(“iptUsername”).send_keys(‘admin’)
注意如果是函数需要增加转义符u,eg.
driver.find_element_by_id(“iptUsername”).send_keys(u’青春’)

键盘输入enter
 
弹窗处理

当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示或者获取提示信息方法如下

 

这将返回当前打开的警报对象。有了这个对象,你现在可以接受,拒绝,读取其内容,甚至类型会得到一个提示。这个接口同样适用警告,确认和提示。参考到的JavaDoc 或RubyDocs的更多信息。

页面切换

一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。
切换窗口的方法如下

 

也可以使用 window_handles 方法来获取每个窗口的操作对象。例如

 
框架(frames)切换

从frames到frames(或到iframe中

 

访问子frames由一个圆点分隔的路径,并且可以通过其索引指定frames。是

 
使用Javascript

你可以执行任意javascript来找到一个元素,只要你返回一个DOM元素,它将自动转换为一个WebElement对象。

简单的例子,在页面上加载了jQuery

 

在页面上的每一个标签查找所有输入元素

 
如何模拟手机访问
 

示例演示

本文地址:http://keair.bhha.com.cn/quote/6057.html    康宝晨 http://keair.bhha.com.cn/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号