2016-12-27 85 views
1

我是Selenium和Java中的新成员,我在使用硒(java)的自动化测试项目中工作,今天我遇到了一个与有关的问题driver.findElement,元素我想查找是由JavaScript创建的,我确定要使用WebDriverWait等待目标元素呈现,即使我使用thread.sleep并等待它几分钟,但webdriver仍然无法找到该元素。找到使用selenium webdriver javascript创建的元素

这是我的问题,在html/js代码中我有一个按钮,单击此按钮javascript将创建一个div,我需要使用硒来定位它以使Automatio Testing工作。

点击一个按钮后,JavaScript却使一个div样子:

<div id="zm-view-frame" class="fade in"><div class="zm-view-header"><div class="zm-view-back"><a onclick="WFLandingpage.closePreview();" id="zm-view-close" class="button" href="javascript:void(0);"><span>Close</span></a></div><div id="zm-view-button"><a href="javascript:void(0);" onclick="WFLandingpage.showDesktop(this)" class="zm-display-desktop"><span>Desktop</span></a><a href="javascript:void(0);" onclick="WFLandingpage.showTablet(this)" class="zm-display-tablet"><span>Tablet</span></a><a href="javascript:void(0);" onclick="WFLandingpage.showMobile(this)" class="zm-display-phone"><span>Mobile</span></a><a href="javascript:void(0);" onclick="WFLandingpage.rotateView()" class="zm-display-rotate"><span>Rotate</span></a></div></div><iframe id="zm-display-iframe" src="page=mvc_landingpages&amp;act=templatepage&amp;preview=1&amp;templateId=landingpage3" style="padding-top: 63px; margin: 0px auto;" scrolling="yes" width="100%" height="609"></iframe></div> 

然后,在Java代码中我写道:

this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("zm-view-frame"))); 

然后:

Tester.Browser.findElement(By.id("zm-view-frame")).click(); 
当然

,我已经定义了this.wait

public WebDriverWait wait = new WebDriverWait(Tester.Browser, 100); 

,我也得到一个等待超时异常

我甚至用许多类型的通过例如XPath,CSS选择器,类...但仍没有运气。

我还使用Selenium IDE for firefox来获取元素,将其导出到java代码并在我的编辑器中查看,然后执行相同的操作,但它对我来说不再适用。

我真的停留在这,你能给我一些帮助吗?

对不起,我的英语不好,非常感谢!

更新 - 这是我的HTML结构: html structure

更新 - 我发现错误,有一个解决方案

原因:上面的代码之前,我有代码的几行检查一个iframe可用,代码如下:

this.wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(locator)); 

我不知道该代码让驱动程序切换到ifra我,所以我上面的代码找到元素是在错误的地方(上下文)。

解决方案:所以我需要回defaut上下文(回父母),我的代码这样的:

Tester.Browser.switchTo().defaultContent(); 

许多感谢到@Naveen提醒我要检查这种情况下:)。

+0

检查您要查找的元素是否在框架元素内,即您的元素是'