没找准定位基准吧。
selenium使用Xpath定位之完整篇
主题 Xpath Selenium
其中有一片文章提到了xpath元素定位,但是该文章中有些并不能适应一些特殊与个性化的场景。在文本中提供xpath元素的定位终极篇,你一定能在这里找到你需要的解决办法。
第一种方法:通过绝对路径做定位(相信大家不会使用这种方式)
Byxpath("html/body/div/form/input")
Byxpath("//input")
第三种方法:通过元素索引定位
Byxpath("//input[4]")
第四种方法:使用xpath属性定位(结合第2、第3中方法可以使用)
Byxpath("//input[@id='kw1']")
Byxpath("//input[@type='name' and @name='kw1']")
第五种方法:使用部分属性值匹配(最强大的方法)
Byxpath("//input[start-with(@id,'nice')
Byxpath("//input[ends-with(@id,'很漂亮')
Byxpath("//input[contains(@id,'那么美')]")
第6种方法:使用xpath轴(未曾使用)
希望,以上这些方法,能够帮助到你。
1通过selenium定位方式(id、name、xpath等方式)定位table标签
#html源码<table border="5" id="table1" width="80%">#selenium *** 作代码table1=driverfind_element_by_id('table1')
2获取总行数(也就是获取tr标签的个数)
#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium *** 作源码
table_rows = table1find_elements_by_tag_name('tr')
3获取总列数(也就是tr标签下面的th标签个数)
#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium *** 作源码:第一个tr标签下有多少个th
table_rows = table_rows[0]find_elements_by_tag_name('th')
4获取单个cell值
#selenium *** 作源码:第一行第二列的text值row1_col2 = table_rows[1]find_elements_by_tag_name('td')[1]text
5取值比对~
查看ui自动化生成的html报告。pytest+allure只生成了xml报告--json格式的数据,没有生成html的index报告。
场景:
排查:
1cmd输入allure --version,查看是安装成功
2pycharm输入pip freeze,查看包是否配置成功
都显示安装、配置成功
3pycharm软件Terminal中输入allure
怀疑是pycharm软件哪里配置除了问题,排查浪费了N多时间。
最终总算是配置好了~
解决方法:
这里有各种策略用于定位网页中的元素(locate elements),你可以选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
下面是查找多个元素(这些方法将返回一个列表):find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
除了上面给出的公共方法,这里也有两个在页面对象定位器有用的私有方法。这两个私有方法是find_element和find_elements。
常用方法是通过xpath相对路径进行定位,同时CSS也是比较好的方法。举例:
[html] view plain copy
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
</body>
<html>
定位username元素的方法如下:[python] view plain copy
username = driverfind_element_by_xpath("//form[input/@name='username']")
username = driverfind_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driverfind_element_by_xpath("//input[@name='username']")
[1] 第一个form元素通过一个input子元素,name属性和值为username实现[2] 通过id=loginForm值的form元素找到第一个input子元素
[3] 属性名为name且值为username的第一个input元素
二 *** 作元素方法
在讲述完定位对象(locate elements)之后我们需要对该已定位对象进行 *** 作,通常所有的 *** 作与页面交互都将通过WebElement接口,常见的 *** 作元素方法如下:
clear 清除元素的内容
send_keys 模拟按键输入
click 点击元素
submit 提交表单
举例自动访问FireFox浏览器自动登录163邮箱。
[python] view plain copy
from selenium import webdriver
from seleniumwebdrivercommonkeys import Keys
import time
# Login 163 email
driver = webdriverFirefox()
driverget("")
elem_user = driverfind_element_by_name("username")
elem_userclear
elem_usersend_keys("15201615157")
elem_pwd = driverfind_element_by_name("password")
elem_pwdclear
elem_pwdsend_keys("")
elem_pwdsend_keys(KeysRETURN)
#driverfind_element_by_id("loginBtn")click()
#driverfind_element_by_id("loginBtn")submit()
timesleep(5)
assert "baidu" in drivertitle
driverclose()
driverquit()
首先通过name定位用户名和密码,再调用方法clear()清除输入框默认内容,如“请输入密码”等提示,通过send_keys("")输入正确的用户名和密码,最后通过click()点击登录按钮或send_keys(KeysRETURN)相当于回车登录,submit()提交表单。PS:如果需要输入中文,防止编码错误使用send_keys(u"中文用户名")。
三 WebElement接口获取值
通过WebElement接口可以获取常用的值,这些值同样非常重要。
size 获取元素的尺寸
text 获取元素的文本
get_attribute(name) 获取属性值
location 获取元素坐标,先找到要获取的元素,再调用该方法
page_source 返回页面源码
drivertitle 返回页面标题
current_url 获取当前页面的URL
is_displayed() 设置该元素是否可见
is_enabled() 判断元素是否被使用
is_selected() 判断元素是否被选中
tag_name 返回元素的tagName
以上就是关于selenium中为什么依据xpath定位html页面左边树形菜单无效全部的内容,包括:selenium中为什么依据xpath定位html页面左边树形菜单无效、Python selenium 打开新页面,怎么放变量(链接)、Python+selenium自动化,Allure包不生成index.html文件,解决方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)