一个关于java+selenium之iframe定位问题

最近做使用java+selenium做一个测试。遇到两个问题,寻找很久解答方案。最终解决了。

① 第一个问题是处理 js 事件弹出对象前未给与反应时间。

具体描述:一般情况获取网络刷新的元素基本会使用selenium的智能等待方法获取。关于这点不做解释。直接贴上代码参考。

private static WebElement getElement(WebDriver driver, String type, String value) {
return (WebElement) new WebDriverWait(driver, 60)
.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
switch (type) {
case "id":
return driver.findElement(By.id(value));
case "name":
return driver.findElement(By.name(value));
case "className":
return driver.findElement(By.className(value));
case "xpath":
return driver.findElement(By.xpath(value));
case "partialLinkText":
return driver.findElement(By.partialLinkText(value));
case "linkText":
return driver.findElement(By.linkText(value));
case "cssSelector":
return driver.findElement(By.cssSelector(value));
}
return null;
}
});

以上可以很好的解决由于网络原因引起的页面元素定位问题。但是由于js事件不需要网络,可能与操作系统反应等有关系。所以,

我在处理连续的js事件的元素时始终找不到此元素。1,使用的id定位、定位没有问题;2,iframe以及handle等都为当前正在处理的

范围,定位范围没有问题。

最终,靠不断胡乱测试,得到解决方案。最终的解决方法是在没有js事件元素定位前加当前线程等待时间来衔接系统等原因的反应。1秒以内

足够。但是必须要有这个时间才能很好的衔接。

② 第二个问题为切换iframe时找不到元素。

    具体描述:由于之前定位到一个iframe,现在需要切换另一个iframe。无论如何始终不成功。做了以下尝试:

      ?切换前线程等待

      ?使用索引切换

       ....................

    最终都不能解决。

在网上找了前辈的提示、最终经过自己的试验得一解决。

※ 提供连接如下

https://wenku.baidu.com/view/969797ece518964bce847c12.html

最终解决方法是:

在切换之前使用 「driver.switchTo().defaultContent();」先回到父iframe,在进行切换「driver.switchTo().frame("xxxrame");」

这个启示就好像是目录的处理队列一样。可能和堆栈的设计有点相似。

正如以上链接中前辈所描述(引用,如有问题请联系删除)

  

原文地址:https://www.cnblogs.com/dengw125792/p/12106057.html

时间: 2024-10-09 17:29:41

一个关于java+selenium之iframe定位问题的相关文章

java selenium (五) 元素定位大全

页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 在自动化测试过程中, 测试程序通常的操作页面元素步骤 1. 找到Web的页面元素,并赋予到一个存储对象中 (WebElement) 2. 对存储页面元素的对象进行操作, 例如:点击链接,在输入框中输入字符等 3. 验证页面上的元素是否符合预期 通过这三个步骤, 我们可以完成一个页面元素的操作, 找

java+selenium环境搭建

这篇文章只是为了记录一下搭建环境,方便自己日后查看. 一.在eclipse中搭建maven 1.安装maven 将apache-maven-3.5.0解压到C盘根目录下 配置maven环境变   MAVEN_HOME : C:\apache-maven-3.3.9  MAVEN : %MAVEN_HOME%\bin  MAVEN_OPTS : -Xms256m -Xmx512m  在path最前面加上: %MAVEN%; 验证maven是否安装成功 Cmd->mvn -version 成功则出现

Java Selenium起步

先将录制的脚本导出来,转成java的格式 在Eclipse中编辑并运行test     2.1 新建一个Java project: File-New-Java Project     2.2 在上一步建好的项目名称上点鼠标右键, 点击Build Path-Add External Archives...,将下载的selenium-java-2.21.0.jar(client)和selenium-server-standalone-  2.21.0.jar(server)加进来 2.3 启动sel

java+selenium的helloworld

在学校上测试课程,接触到自动化管理工具,在加上助教工作需要改作业,所以想着学下selenium这一强大的web自动化工具. 1.lenium官网:http://www.seleniumhq.org/   在此下载selenium的安装包,我下载的是selenium-java-3.8.0.具体的selenium版本号不太清楚,应该是selenium2(也称作selenium webdriver) 2.下载chrome和对应的chromedriver. chrome版本号:62.0.3202.89 

java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离

1.主要介绍介绍Java+Selenium+POM的自动化测试框架的搭建,第一个首先实现代码和账号URL等信息的分离.第二点支持跨浏览器,通过读取配置文件的方式实现. 1)将账号URL等信息添加在properties文件中然后读取 2)编写浏览器类通过去取配置文件实现浏览器的切换 3)测试浏览器类 项目结构: 1.新建一个文件夹将properties文件放在文件夹中内容如下: # browser switcher #browserName = FirefoxbrowserName = Chrom

Java + Selenium 3.x 实现Web自动化 - 1.自动化准备

(一)自动化准备 说明:本文主要记录了基于公司现有项目(一个电子商务平台),从0开始实现UI自动化的历程.从准备阶段,部分内容直接省略了基础知识,一切以最终做成自动化项目为目标,难免会有晦涩之处.文章主要用于记录过程,翻阅回顾.如有记录出错,描述晦涩之处,望读者能及时指出,一起进行讨论交流,以免误导他人. 1 所使用工具的简单介绍 1.java + selenium WebDriver:用于脚本的编写: 2.TestNG:测试框架,用于结构化用例,生成测试报告: 3.log4j2:用于生成日志:

Mac系统搭建java+selenium+testng环境

Mac系统搭建java+selenium+testng环境: 1.   配置java环境,安装eclipse 2.  离线安装testng插件 3.  配置maven环境 4.  安装谷歌浏览器,下载对应浏览器版本的chromedriver 陆陆续续遇到的一些小问题记录: 1.  testng是使用离线方式安装的,离线包下载地址:http://dl.bintray.com/testng-team/testng-eclipse-release/ 下载完成后将其放到eclipse的dropins文件

Java+selenium+Firefox/ IE/ Chrome主流浏览器自动化环境搭建

一.java+selenium+firefox 1.环境准备:JDK1.8 2.安装firefox浏览器v59 3.下载驱动:https://github.com/mozilla/geckodriver/releases 4.selenium依赖pom.xml导入:https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java selenium 历史版本镜像下载地址:https://npm.taobao.org/m

selenium处理iframe和动作链

selenium处理iframe和动作链 iframe iframe就是一个界面里嵌套了其他界面,这个时候selenium是不能从主界面找到子界面的属性,需要先找到子界面,再去找子界面的属性 动作链(拖动) 1.from selenium.webdriver import ActionChains 2.实例化一个动作链对象:action = ActionChains(浏览器对象) 3.click_and_hold(div) 4.move_by_offset(x,y)向x,y移动像素 5.perf