通过PageFactory方法初始化时,在不同机器上无法识别页面元素

时间:2015-08-28 13:17:43

标签: selenium webdriver

亲爱的朋友和同事

这是一个奇怪的场景,或者可能是已经面临这个问题的人不确定但是亲自看看。

考虑使用PageFactory方法初始化5个字段。登录页面上有3个字段已经加载到DOM中,其余2个(登录后的主页)字段尚未加载到DOM中。

现在,当我使用网格从其他客户端远程启动登录测试时,它可以正常工作。

但是,当我使用网格在同一客户端上远程启动另一台计算机的测试时,无效。

我的工具集 语言绑定=> C#WebDriver 2.47.0,TestRunner => Gallio / mBUnit,Browser =>任何(Chrome / FF),DotNet Grid Standalone Server 2.47.1

我有一个Login函数,其中所有页面元素都通过PageFactory方法初始化,如下所示

public LoginFunction(驱动程序)         {             PageFactory.InitElements(driver,this);
        }

元素声明如下

    [FindsBy(How = How.CssSelector, Using = @"#UserName")]
    [CacheLookup]
    public IWebElement UserNameTextField { get; set; }

    [FindsBy(How = How.CssSelector, Using = @"#Password")]
    [CacheLookup]
    public IWebElement PasswordTextField { get; set; }

    [FindsBy(How = How.CssSelector, Using = @".span2>input")] //input[@value='Sign in']")]
    [CacheLookup]
    public IWebElement LoginButton { get; set; }

    [FindsBy(How = How.XPath, Using = @"//h2[contains(text(),'Welcome, admin')]")]
    [CacheLookup]
    public IWebElement WelcomeFormMessageText { get; set; }

   [FindsBy(How = How.Id, Using = @"tabslist")]
    [CacheLookup]
    public IWebElement MainTabsList { get; set; }

现在当PageFactory.InitElements(驱动程序,这个);语句执行时,测试失败,同时初始化实际上不存在于DOM中的WelcomeFormMessageText IWebElement。登录成功后,这些元素出现在主页上。

现在的问题是,当我从我的机器运行它时,同样的测试运行良好,当我从另一台机器运行它时失败: - (

两台机器配置相同,具有相同的操作系统,浏览器版本,位系统等。

我试图在第三台机器上运行测试,但它也失败了。它似乎只能从我的m / c运行。

有没有人见过这个问题?或者有任何线索?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在远程计算机上运行测试通常比在本地运行测试慢。 我认为这是由于登录后延迟到达远程计算机上的主页,因此您无法在主页上看到元素,因为HomePage尚未加载。

尝试在登录后添加等待,然后访问HomePage上的元素,它应该可以工作。

您还需要在登录后重新初始化PageFactory以获取页面上的新元素。

虽然,我强烈建议您为登录页面和主页设置单独的PageFactory。