appium 怎么跳转页面定位元素

appium 怎么跳转页面定位元素,第1张

以下内容来自互联网,版权归原作者。

思路:因为没有name,id;其实剩下的选择已不多,要么xpath,要么className。xpath木有好印象(稳定性不高,加之10x后需要写全路径,相当崩溃),我决定十分个人色彩的建议使用className。

具体方法:

用className获取所有该类型的元素

根据元素的位置确定元素的index;

获取目标元素。

示例:

List<WebElement> lis = driverfindElementsByClassName("androidwidgetImageView");//获取ImageView的所有元素

WebEelement targetEle = lisget(0);//获取列表中第一个元素

进阶:

你可以自己定义一个className的常量,然后封装个方法,提供大家使用:

public List<WebElement> getAllImges(){

List<WebElement> lis = driverfindElementsByClassName(AndroidClassNameIMAGEVIEW);

return lis;

}

使用的时候,就只需要调用此方法就可以了

此方法的好处:通吃的方法,基本可解决定位的问题;能解决多语言(自然语言)的困扰;

缺点:因为系统需要去获取List,就目前来看,运行效率不是很高,那直接是可以用肉眼看的到的速度在跑。。。

2、关于没有name,没有ID的元素的定位---特用篇

因为是特用,所以需要对页面元素做进一步的分析,找出其中的特性。这些特性主要为className,index,以及clickable等属性。

场景1:同一个页面有10个ImageView对象,而我们的目标元素的index为4,而同为ImageView且index为4的页面只有2个。那我们就可以根据这2个条件来组合查询条件,提高效率。

示例:

List<WebElement> lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+"androidwidgetImageView"+")index(4)");

基于这个场景可以封装一个方法:

public List<WebElement> getElementsByClassAndIndex(String classname,int index){

List<WebElement> lis =null;

lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+classname+")index("+index+")");

return lis;

}

场景2:同一个页面有10个ImageView对象,而其中index为4的有5个,而这时我们发现我们的目标元素的是clickable的。然后review页面发现,同时满足上述条件的只有2个。那么。。。

示例:

List<WebElement> lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+"androidwidgetImageView"+")index(4)clickable(true)");

同样可以封装一个方法:

public List<WebElement> getElementsByClassAndIndexAndClickable(String classname,int index){

List<WebElement> lis =null;

lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+classname+")index("+index+")clickable(true)");

return lis;

}

场景3:在分析页面元素的时候发现,页面相对比较简单,而且其中只有目标元素的index为4

示例:

driverfindElementByAndroidUIAutomator("new UiSelector()index("+index+")");

同样得到一个方法

public WebElement getElementByIndex(int index){

return driverfindElementByAndroidUIAutomator("new UiSelector()index("+index+")");

}

使用Selenium WebDriver驱动浏览器测试的过程中多多少少会遇到一些折腾人的问题,总结了一部分,做下分享。

一、隐藏元素处理(element not visible)

使用WebDriver点击界面上被隐藏的元素时,使用默认的IWebElementClick()方法可能无法触发Click事件,这时的修改方案可以采用执行JS的方式来实现。

IWebElementwebElement = driverFindElement(ById(elementId));

IJavaScriptExecutorjs = driverasIJavaScriptExecutor;

jsExecuteScript("arguments[0]click();",webElement);

二、页面跳转后找不到元素(no such element)

页面跳转获取新页面的元素需要时间,所以需要在跳转后增加等待时间,最通用的方法是判断在某个时间内元素是否加载完成。

driverManage()Timeouts()ImplicitlyWait(TimeSpanFromSeconds(10));

三、屏蔽动画

如果网站使用了JQuery的动画效果,我们在运行测试的时候可以disable JQuery的animation,代码如下:

IJavaScriptExecutorjs = driverasIJavaScriptExecutor;

jsExecuteScript("jQueryfxoff=true");

四、不确定出现的元素处理

有的网站首次访问时会d出广告,第二次访问则不再显示,这种情况可以自己调用WebDriver的IsElementPresent(Byby)方法进行判断

if(IsElementPresent(Byby)))

{

driverFindElement(by)Click();

}

五、Cookie登录

自动化测试中,许多地方要求登录,cookie能够实现不必每次输入用户名和密码进行登录。

Cookiecookie =newCookie(name,value,domain,path,expires);

driverManage()CookiesAddCookie(cookie);

说明:参数分别为Cookie的名称,内容,域,路径,过期时间。

六、上传

参考:《Selenium(C#)实现上传的两种方式》

七、带placeholder属性的输入框Clear无效(invalid element state)

自动测试时,会出现某些带有默认值的输入框Clear()方法报错,错误提示:invalid element state: Element is not currently interactable and may not be manipulated,此时需要检查下输入文本框是否带有placeholder属性,如果有则直接略过Clear方法,原因如下:

placeholder定义和用法

placeholder属性提供可描述输入字段预期值的提示信息(hint)。

该提示会在输入字段为空时显示,并会在字段获得焦点时消失。

八、切换窗口

参考《WebDriver(C#)之窗口切换》

foreach(stringwinHandleindriverWindowHandles)  //遍历当前打开的窗口

{

driverSwitchTo()Window(winHandle);

if(driverTitleContains(title)) //title是新窗口的Title

{

break;

}

}

九、Iframe元素定位

如果一个页面是一个html元素,只有一个head,一个body,使用driverFindElement()可以查找页面中任何一个元素。但是,页面中如果嵌入<frame…/>是的页面包含多个html元素,这种情况下就先要定位到元素所在的frame,然后再查找对应的元素,代码如下:

IWebElementframe = driverFindElement(ByXPath("//[@id='form1']/div[1]/div[1]/iframe"));

driverSwitchTo()Frame(frame);

十、Firefox代理设置

WebDriver每次启动一个Firefox的实例时,会生成一个匿名的profile,并不会使用当前Firefox的profile。所以如果要访问需要通过代理的web服务,直接设置Firefox的代理是没用的,因为WebDriver启动的Firefox不会使用该profile,需要在代码里设置FirefoxProfile属性,或者直接调用默认的profile。

publicIWebDriverProxyConfig()

{

FirefoxProfilefirefoxProfile =newFirefoxProfile();

firefoxProfileSetPreference("networkproxytype",1);

firefoxProfileSetPreference("networkproxy>

firefoxProfileSetPreference("networkproxy>

firefoxProfileSetPreference("networkproxyno_proxies_on","");

returnnewFirefoxDriver(firefoxProfile);

}

或者启动默认的profile

stringpath =@"C:\Users\username\AppData\Local\Mozilla\Firefox\Profiles\a8xlln4mdefault";

FirefoxProfileffprofile =newFirefoxProfile(path);

driver =newFirefoxDriver(ffprofile);

这个读不了网页元素,是因为你的网页都没有打开!它怎么去读取元素。建议用chrome来做这些页面 *** 作,会比较好用,没有这么多问题,IE和Firefox对这个webdriver支持不太好,会有很多问题!

尴尬,我在单页面里想要指定在某个页面上跳过viewapi的back事件,问题是没法判断当前在哪个页面,暂时是存在localstorage里,但这样做感觉不太好,

参考一下,也许可以帮助。

微信跳转至第三方网站不提示

1、首先打开自己的苹果手机,在手机桌面点击设置这个图标。

2、打开设置页面后,点击打开通用这个选项。

3、然后在打开的页面往下拉取页面,找到辅助功能这个选项并且点击打开。

4、进入辅助功能页面,再往下拉取界面,找到主屏幕按钮这个选项,并且点击打开。

5、然后在打开的页面,勾选慢选项。

6、退出设置,双击Home键试一下,如果还是会跳转到桌面,那么就再回到刚才第五步的页面,勾选最慢这个选项即可。

<html>

<script type="text/javascript">  //JS必须写在这个标签下,这个标签必须在HTML标签下

function test(but){   //函数必须有入参才能接收你传入的参数

                   var name= butname;  //name属性是对象本身就有的属性,可以直接取。

   alert(name); 

}   

</script>                                       

<button type='button' onclick='test(this)' name='btn'>按钮</button>

</html>

<a>设置为空连接,然后点击执行Js,js延时windowlocationhref=就这个思路。试试,如果<a>空要跳转本页的话,你就写个<p>或者span成a的样式,点击后执行上面的js就行

以上就是关于appium 怎么跳转页面定位元素全部的内容,包括:appium 怎么跳转页面定位元素、WebDriver软件怎样使用、如何利用python的splinter框架控制当前测试页面的跳转页面上的元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9689360.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存