2016-07-11 125 views
0

我得到ElementNotVisibileException,但此頁面沒有名稱爲「歷史」的重複的名稱,但它確實有「調用歷史記錄」。任何人都可以提供最好的定位器來定位元素?ElementNotVisibleException:元素當前不可見,因此可能不會與

<li class="ui-widget ui-menuitem ui-corner-all ui-menu-parent" aria- haspopup="true" role="menuitem"> 
    <a class="ui-menuitem-link ui-corner-all" href="javascript:void(0)"> 
     <span class="ui-menuitem-text">History</span> 
     <span class="ui-icon ui-icon-triangle-1-e"></span> 
    </a> 

錯誤

org.openqa.selenium.ElementNotVisibleException:元素當前不可見,因此可能無法與之交互(警告:服務器未提供任何信息棧跟蹤)命令持續時間或超時:122毫秒建立信息:版本:'2.52.0',修訂:'4c2593c',時間:'2016-02-11 19:03:33'系統信息:主機:'rsn-GA-78LMT-S2',ip :'127.0.1.1',os.name:'Linux',os.arch:'amd64',os.version:'3.13.0-54-generic',java.version:'1.7.0_101'Session ID:17716ecc -ffe3-40f9-92a6-8a106acf478d驅動程序信息:org.openqa.selenium.firefox.FirefoxDriver Capabil ities [{platform = LINUX,acceptSslCerts = true,javascriptEnabled = true,cssSelectorsEnabled = true,databaseEnabled = true,browserName = firefox,handlesAlerts = true,nativeEvents = false,webStorageEnabled = true,rotate = false,locationContextEnabled = true,pplicationCacheEnabled = true ,takesScreenshot = TRUE,版本= 38.0.1}] atun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法)

+0

操作c_history1 = new Actions(obj); \t \t WebElement visbilityhc = obj.findElement(By.xpath(「// span [contains(text(),'Visibility')]」)); WebElement vhistoryc = obj.findElement(By.xpath(「// span [text()='History']」)); \t \t WebElement vhcalls = obj.findElement(By.xpath(「// span [(text()='Calls')]」)); \t \t c_history1.moveToElement(visbilityhc).moveToElement(vhistoryc).moveToElement(vhcalls).click()。build()。perform(); –

+0

如果您在最初發布問題(如上面的代碼)後還想添加一些額外的細節,而不是將其添加爲評論,請繼續編輯您的問題並在其中添加它,以便它可以正確格式化並更多很容易被未來的讀者找到。 – JeffC

+0

當你遇到異常時,'ElementNotVisibleException',這意味着你的元素被找到了,但是它不可見,所以它不能被交互。 Selenium被設計爲只與用戶交互元素,因爲用戶不能與不可見的元素交互,Selenium也不會。從您的「操作」代碼中,您似乎需要多次懸停,然後點擊。您是否嘗試添加一箇中斷點並逐步瀏覽代碼以查看會發生什麼?它可能會幫助您找到問題。 – JeffC

回答

0

如果你想獲得其中具有文本Historya元素,嘗試使用linkTextExpectedConditions.visibilityOfElementLocated等到元素可見如下: -

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement linkElement= wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("History"))); 

或者如果你想獲得其中具有文本Historyspan元素,嘗試如下使用xPath: -

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement spanElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text() = 'History']"))); 

編輯: - 如果此element在事件越來越明顯的鼠標嘗試使用Action爲執行下面MouseOver: -

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement spanElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[text() = 'History']"))); 
Actions builder = new Actions(driver);  
builder.moveToElement(spanElement).perform(); 

builder.mouse.mouseMove(((Locatable)spanElement).coordinates) 

希望它能起作用.. :)

+0

其實就是鼠標點擊元素,可見性>歷史 - >調用,所以我需要使用動作類,所以你可以建議 –

+0

@KumarUppu ok看到更新的答案... –

+0

動作c_history1 =新Actions(obj); WebElement visbilityhc = obj.findElement(By.xpath(「// span [contains(text(),'Visibility')]」)); WebElement vhistoryc = obj.findElement(By.xpath(「// span [text()='History']」)); \t \t WebDriverWait wait = new WebDriverWait(obj,2);我們可以通過下面的例子來說明如何使用WebElement來創建一個WebElement對象。 \t \t // WebElement vhcalls = obj.findElement(By.xpath(「// span [contains(text(),'Calls')]」)); \t \t c_history1.moveToElement(visbilityhc).moveToElement(vhistoryc).moveToElement(spanElement).click()。build()。perform(); –

相關問題