我有一個包含可重用方法的關鍵類。我試圖在兩種方法中使用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)
請等待元素後轉到的網址。有時元素不能立即可用。 –
等待 wait = new WebDriverWait(driver,waitTime); WebElement we = null; we = wait.until(ExpectedConditions.elementToBeClickable(By.id(urEleId))); if(we!= null){ //做一些事情,如果找到 } else { //做一些事情,如果沒有找到 } –