2014-02-21 108 views
0

我有一個包含可重用方法的關鍵類。我試圖在兩種方法中使用WebElement。他們關心在一起。我知道這是webelement這是失敗的,因爲我可以編寫它沒有在兩個方法中,它工作正常。如果在調用包含webelement的方法時沒有失敗,我該如何正確地做到這一點? (沒有這樣的元素除外)Selenium兩種方法中的Webelement在調用時失敗

公共類鍵{

WebElement webElement = null; 

public void hoover(String path) throws InterruptedException{ 

    webElement= driver.findElement(By.xpath(path)); 
    Actions act = new Actions(driver); 
    act.moveToElement(webElement).perform(); 
    Thread.sleep(5000); 
} 


public void click(String path) throws InterruptedException{ 

    webElement = driver.findElement(By.xpath(path)); 
    webElement.click();//This opens menu list 
    Thread.sleep(5000); 
} 

另一類這樣使用:

session.navigate("url"); 
session.hoover("someTab"); 
Assert.assertTrue(session.isElementPresent("otherSub"), "Element not present"); 
session.click("otherSub"); 

    org.openqa.selenium.NoSuchElementException: no such element 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193) 
a openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) 
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554) 
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307) 
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:404) 
at org.openqa.selenium.By$ByXPath.findElement(By.java:363) 
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299) 
at com.salesforce.util.Keywords.actionHoover(Keywords.java:101) 
at com.salesforce.testcases.SmokeTest.topMenuTest(SmokeTest.java:24) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
at org.testng.TestRunner.privateRun(TestRunner.java:767) 
at org.testng.TestRunner.run(TestRunner.java:617) 
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
at org.testng.TestNG.run(TestNG.java:1057) 
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 
+0

請等待元素後轉到的網址。有時元素不能立即可用。 –

+0

等待 wait = new WebDriverWait(driver,waitTime); WebElement we = null; we = wait.until(ExpectedConditions.elementToBeClickable(By.id(urEleId))); if(we!= null){ //做一些事情,如果找到 } else { //做一些事情,如果沒有找到 } –

回答

0

的問題可能是因爲你不等待該元素是可見的。這可能是由於您在它可用之前請求它(在將其加載到頁面之前)之前所要求的。硒作爲一個用戶,所以你需要告訴它等待元素是可見的,然後得到它,而不是僅僅在瞬間得到它

public void clickElementWhenReady(By locator, int timeout) { 
    WebDriverWait wait = new WebDriverWait(driver, timeout); 
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(locator)); 
    element.click(); 
} 

你可以以集中的元素實現類似的東西一段時間,並拋出錯誤之後

+0

謝謝保羅,我試過,但這不是問題。它甚至不會在選項卡上隱藏。 – user3335808

+0

我想通了,我沒有加載屬性... OR.getPropery(xpath) – user3335808

0

失蹤OR.getProperty()

webElement = driver.findElement(By.xpath(OR.getProperty(path))); 
webElement.click();//This opens menu list 
Thread.sleep(5000); 
相關問題