span标签下拉框怎么定位

span标签下拉框怎么定位,第1张

您好,span标签下拉框的定位可以通过CSS选择器来实现,比如:span[name="dropdown"] {position: absolute}。这样就可以把span标签下拉框定位到指定的位置。此外,还可以使用JavaScript来实现定位,比如:document.getElementsByName("dropdown")[0].style.position = "absolute"。这样就可以把span标签下拉框定位到指定的位置。

selenium,一个有效的自动化测试工具,我主要介绍下关于如何封装WebDriver,为一个比较轻松上手的自动化测试埋下铺垫

工具/原料

selenium-server-standalone-2.39.0.jar软件包

方法/步骤

先了解下什么是WebDriver

熟悉WebDriver的关于JAVA的一些API的使用

介绍一个火狐的插件firepath

我做的自动化测试是在火狐上运行的,因为我找到一个对于自动化测试比较有帮助的插件,那就是firepath,具体用法,就是先安装该插件,它会在firebug那么调试的窗口最右边出现。firepath截图和firepath安装后的截图如下所示。(优点:点哪个元素,哪个元素的xpath路径立马显示,看图吧)

自己封装的WebDriver的API方法

package com.qiang.data

import java.util.Iterator

import java.util.List

import java.util.Set

import org.openqa.selenium.By

import org.openqa.selenium.NoSuchElementException

import org.openqa.selenium.WebDriver

import org.openqa.selenium.WebElement

/**

* WebDriver帮助类

*/

public class WebDriverUtil {

/**

* 写在前面的话:

* 我写的这个WebDriver帮助类法仅仅针对于xpath访问的

* 为什么这么写呢?有两点理由

* 其一:xpath获取方便,我用的是firefox浏览器,只要用firepath这个插件,我们就可以正确的定位到每一个节点,并且firepath支持查询功能,值得大家使用

* 其二:使用统一的xpath,给编码带来了一定的规范

*/

/**

* 没有验证码的的登录

* @param wd WebDriver对象

* @param unameXpath 用户名的xpath路径

* @param uname 用户名

* @param pwdXpath 密码xpath路径

* @param pwdValue 密码

* @param loginBtnXpath 登录按钮xpath

*/

public static void login(WebDriver wd,String url,String unameXpath,String uname,String pwdXpath,String pwd,String loginBtnXpath){

wd.get(url)

inputs(wd,unameXpath,uname)

inputs(wd,pwdXpath, pwd)

click(wd,loginBtnXpath)

}

/**

* 登录可能放在一个frame里了:我是因为遇到过,所以才加了个方法的

* @param wd WebDriver对象

* @param unameXpath 用户名的xpath路径

* @param uname 用户名

* @param pwdXpath 密码xpath路径

* @param pwdValue 密码

* @param loginBtnXpath 登录按钮xpath

* @param frame 第几个框架

*/

public static void loginFrame(WebDriver wd,String url,String unameXpath,String uname,String pwdXpath,String pwd,String loginBtnXpath,int frame){

wd.get(url)

wd.switchTo().frame(frame)

inputs(wd,unameXpath,uname)

inputs(wd,pwdXpath, pwd)

click(wd,loginBtnXpath)

}

/**

* 有验证码的登录

* @param wd WebDriver对象

* @param unameXpath 用户名的xpath路径

* @param uname 用户名

* @param pwdXpath 密码xpath路径

* @param pwdValue 密码

* @param loginBtnXpath 登录按钮xpath

* @param seconds 输入验证码的间隔

*/

public static void loginVerify(WebDriver wd,String url,String unameXpath,String uname,String pwdXpath,String pwd,String loginBtnXpath,int seconds){

wd.get(url)

inputs(wd,unameXpath,uname)

inputs(wd,pwdXpath, pwd)

try {

Thread.sleep(seconds*1000) //这段时间内请输入验证码

} catch (InterruptedException e) {

e.printStackTrace()

}

click(wd,loginBtnXpath)

}

/**

* 获取页面单个元素

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static WebElement getElement(WebDriver wd,String xpath){

return wd.findElement(By.xpath(xpath))

}

/**

* 获取页面的一组元素

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static List<WebElement>getElements(WebDriver wd,String xpath){

return wd.findElements(By.xpath(xpath))

}

/**

* 获取元素节点的文本值

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static String getText(WebDriver wd,String xpath){

return wd.findElement(By.xpath(xpath)).getText()

}

/**

* 获取元素节点的文本值

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return 没有找到该元素时会有个提示,并且不会报错,建议使用

*/

public static String getExistText(WebDriver wd,String xpath){

if(isExist(wd, xpath)){

return getText(wd, xpath)

}

return "-1"

}

/**

* 获取元素节点的属性值

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @attribute 要获取目标节点的哪个属性

* @return

*/

public static String getAttribute(WebDriver wd,String xpath,String attribute){

return wd.findElement(By.xpath(xpath)).getAttribute(attribute)

}

/**

* 点击节点

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static void click(WebDriver wd,String xpath){

wd.findElement(By.xpath(xpath)).click()

}

/**

* 输入文本

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static void inputs(WebDriver wd,String xpath,String value){

wd.findElement(By.xpath(xpath)).sendKeys(value)

}

/**

* 判断是否选中

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static boolean isChecked(WebDriver wd,String xpath){

return wd.findElement(By.xpath(xpath)).isSelected()

}

/**

* 判断是否可用

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static boolean isEnabled(WebDriver wd,String xpath){

return wd.findElement(By.xpath(xpath)).isEnabled()

}

/**

* 判断是否存在元素

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

* @return

*/

public static boolean isExist(WebDriver wd,String xpath){

try{

wd.findElement(By.xpath(xpath))

return true

}catch (NoSuchElementException e) {

return false

}

}

/**

* 选中复选框,其实和点击一样,只是重新起了个名字

* @param wd WebDriver对象

* @param xpath 目标节点的xpath

*/

public static void check(WebDriver wd,String xpath){

click(wd, xpath)

}

/**

* 点击那种隐藏的下拉框

* @param wd WebDriver对象

* @param xpath1 事件源节点的xpath

* @param xpath2 目标节点的xpath

*/

public static void clickHidden(WebDriver wd,String xpath1,String xpath2){

click(wd, xpath1)

click(wd, xpath2)

}

/**

* 获取隐藏的文本,原理同上

* @param wd WebDriver对象

* @param xpath1 事件源节点的xpath

* @param xpath2 目标节点的xpath

*/

public static void getHiddenText(WebDriver wd,String xpath1,String xpath2){

click(wd, xpath1)

getText(wd, xpath2)

}

/**

* 获取隐藏节点的属性值

* @param wd WebDriver对象

* @param xpath1 事件源节点的xpath

* @param xpath2 目标节点的xpath

* @param attribute 要获取目标节点的哪个属性

*/

public static String getHiddenAttribute(WebDriver wd,String xpath1,String xpath2,String attribute){

click(wd, xpath1)

return getAttribute(wd, xpath2, attribute)

}

/**

* 切换窗口

* @param wd WebDriver对象

* @param title 要切换窗口的标题

*/

public static void changeWindow(WebDriver wd,String title){

String current = wd.getWindowHandle()

Set<String>all = wd.getWindowHandles()

Iterator<String>iterator = all.iterator()

while (iterator.hasNext()) {

String handle = iterator.next()

if(handle.equals(current)){

continue

}

else{

wd.switchTo().window(handle)

if(wd.getTitle().contains(title)){

System.out.println("窗口成功跳转")

break

}

else{

continue

}

}

}

}

}

5

个人小结

以上基于WebDriver简单的封装在一定程度上可以减少代码量,封装得太少,看到的你根据自己的需要进行扩充吧,我个人特点是喜欢封装一切可以复用的代码,以便达到高效率的编码,并不是说会编码就够了,多总结总结还是会让自己的编码路不会走的那么崎岖些

如果是这种情况,就考虑其他的定位方法了,肯定有一种能够解决的。

有这几种方法,也可以用:

一、

如果xpath一样,id不一样的话,可以通过找id(viewer当中的resource-id),

self.driver.find_element_by_id("com.chanjet.csp.customer:id/workrecord_add_content").send_keys(contextfield)

二、

如果一定要用xpath,看看viewer当中@index是不是有一个是0,有一个是1,一般来说不会重;如果真的重了,通过text可者其他的不一致的项,再试试

self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'报价')]")

除了这些,还有以下的找元素的方式,换一换,总有一个能行的

self.driver.find_element_by_class_name('android.widget.ImageView').click()

self.driver.find_element_by_name("新增工作记录").click()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11423801.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存