【问题标题】:How to get @FindAll working for InternetExplorer WebDriver with Selenium如何使用 Selenium 让 @FindAll 为 InternetExplorer WebDriver 工作
【发布时间】: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


【解决方案1】:

事实证明这不是代码的问题。相反,需要打开 Internet 选项中的一个设置才能使其正常工作。 高级 > 设置 > 安全 > 允许活动内容在我的电脑上的文件中运行。

选中此框后,我的 IE 测试按预期运行。

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 2018-05-22
    • 2012-06-03
    • 2018-04-05
    • 1970-01-01
    • 2020-01-14
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多