一个关于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() {
@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");」

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

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

  一个关于java+selenium之iframe定位问题_第1张图片

你可能感兴趣的:(一个关于java+selenium之iframe定位问题)