【发布时间】:2016-10-02 17:06:18
【问题描述】:
我正在尝试针对 Internet Explorer 运行 TestNG 套件。但是,尝试使用 CSS 定位器在网页上查找元素似乎失败了。我正在使用 @FindAll 注释来指定多个定位策略,这些策略适用于 Chrome 和 Firefox。这是我在 TestNG 失败摘要中看到的错误:
org.openqa.selenium.WebDriverException:(警告:服务器没有 提供任何堆栈跟踪信息)命令持续时间或超时:70 毫秒构建信息:版本:'2.53.0',修订:'35ae25b',时间: '2016-03-15 17:00:58' 系统信息:主机:'(此处省略主机名)',ip: '10.18.28.53', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_91' 驱动程序信息: org.openqa.selenium.ie.InternetExplorerDriver 功能 [{browserAttachTimeout=0, ie.enableFullPageScreenshot=true, enablePersistentHover=true, 即.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false,即fileUploadDialogTimeout=3000,版本=11, 平台=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0,即.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:28843/, javascriptEnabled=true, ignoreProtectedModeSettings=false,enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}] 会话 ID: 3ccb2fc8-aac7-484c-8a0d-ca8c8539742e *** 元素信息:{Using=css selector, value=#content > div.container > h1} at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)在 java.lang.reflect.Constructor.newInstance(未知来源) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) 在 org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:388) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementsByCssSelector(RemoteWebDriver.java:496) 在 org.openqa.selenium.By$ByCssSelector.findElements(By.java:441) 在 org.openqa.selenium.support.pagefactory.ByAll.findElements(ByAll.java:63) 在 org.openqa.selenium.support.pagefactory.ByAll.findElement(ByAll.java:52) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355) 在 org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69) 在 org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38) 在 com.sun.proxy.$Proxy13.getText(Unknown Source) 在 com.webcp.common.pageobjects.LoginPage.getLoginTextTop(LoginPage.java:58) 在 com.webcp.common.pageobjects.LoginPage.verifyLoginTextTop(LoginPage.java:65) 在 com.webcp.common.tests.LoginPageTest.verifyLoginPage(LoginPageTest.java:45) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 在 org.testng.internal.Invoker.invokeMethod(Invoker.java:639) 在 org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) 在 org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) 在 org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 在 org.testng.TestRunner.privateRun(TestRunner.java:774) 在 org.testng.TestRunner.run(TestRunner.java:624) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 在 org.testng.SuiteRunner.run(SuiteRunner.java:261) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 在 org.testng.TestNG.run(TestNG.java:1048) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)
这是正在运行的代码块:
TestBaseSetup 类 sn-p:
public class TestBaseSetup
{
private static WebDriver driver;
private static Logger Log = Logger.getLogger(TestBaseSetup.class.getName());
static String driverPath = "C:\\Users\\bberndt\\eclipse\\Selenium Files\\";
public static WebDriver getDriver()
{
return driver;
}
private static WebDriver initIEDriver(String appURL)
{
Log.info("Launching Microsoft Internet Explorer with new profile");
File file = new File(driverPath + "IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver();
Log.info("Driver instantiated");
driver.manage().window().maximize();
Log.info("Window maximized");
driver.get(appURL);
Log.info("Navigating to: " + appURL);
return driver;
}
}
LoginPageTest 类:
public class LoginPageTest extends TestBaseSetup
{
private WebDriver driver;
private LoginPage loginPage;
private HomePage homePage;
private SoftAssert softAssert;
private static Logger Log = Logger.getLogger(LoginPageTest.class.getName());
private String sTestCaseName;
private int iTestCaseRow;
@BeforeMethod
public void setUpTest()
{
driver = getDriver();
Log.info("Driver loaded");
//loginPage = new LoginPage(driver);
loginPage = PageFactory.initElements(driver, LoginPage.class);
homePage = PageFactory.initElements(driver, HomePage.class);
softAssert = new SoftAssert();
}
@Test(priority = 1)
public void verifyLoginPage()
{
Log.info("--------------------------START TEST---------------------------");
Log.info("Test 1: verifyLoginPage");
softAssert.assertTrue(loginPage.verifyLoginPageTitle(), "Login page title does not match\n");
softAssert.assertTrue(loginPage.verifyLoginTextTop(), "Login text top does not match\n");
softAssert.assertTrue(loginPage.verifyLoginTextBottom(), "Login text bottom does not match\n");
softAssert.assertAll();
}
}
LoginPage 对象存储库:
public class LoginPage
{
protected WebDriver driver;
private static Logger Log = Logger.getLogger(LoginPage.class.getName());
@FindAll({ @FindBy(xpath = "/html/body/div/div/div/h1"),
@FindBy(css = "#content > div.container > h1") })
private WebElement loginTextTop;
@FindAll({ @FindBy(xpath = "/html/body/div/div/div/h2"),
@FindBy(css = "h2") })
private WebElement loginTextBottom;
public LoginPage(WebDriver driver)
{
this.driver = driver;
}
public String getPageTitle()
{
String title = driver.getTitle();
return title;
}
public boolean verifyLoginPageTitle()
{
String expectedPageTitle = "WTS";
return getPageTitle().contains(expectedPageTitle);
}
public String getLoginTextTop()
{
String TextTop = loginTextTop.getText();
return TextTop;
}
public boolean verifyLoginTextTop()
{
String expectedPageText = "Welcome to CenterPoint™";
return getLoginTextTop().contains(expectedPageText);
}
public String getLoginTextBottom()
{
String TextBottom = loginTextBottom.getText();
return TextBottom;
}
public boolean verifyLoginTextBottom()
{
String expectedPageText = "Please Sign In";
return getLoginTextBottom().contains(expectedPageText);
}
}
【问题讨论】:
-
这应该针对哪些版本的 Internet Explorer 运行?
-
我使用的版本是IE 11 @Zoot
标签: css internet-explorer selenium-webdriver findall