我是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&act=templatepage&preview=1&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提醒我要检查这种情况下:)。
检查您要查找的元素是否在框架元素内,即您的元素是'
谢谢@Naveen我已经检查过,它的父母页面的
哪个地方我正在工作 – Risk正如我在HTML中看到的,class被定义为'fade in'。你确定元素显示在网页上吗?或者您需要执行一些操作(如悬停等)才能显示元素? –