我是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'。你確定元素顯示在網頁上嗎?或者您需要執行一些操作(如懸停等)才能顯示元素? –