当前位置: 首页 > 知识库问答 >
问题:

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

庞彬
2023-03-14

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

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

现在,当我使用网格在其他客户机上远程启动登录测试时,它工作得很好。

元素声明如下

    [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(driver,this);语句,则在初始化WelcomeFormMessageText IWebElement时测试失败,而该IWebElement实际上不存在于DOM中。登录成功后,这些元素将出现在主页上。

现在的问题是,相同的测试在我的机器上运行时运行良好,而在另一台机器上运行时失败:-(

共有1个答案

越运锋
2023-03-14

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

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

您还需要在登录后重新初始化PageFactory以获得Page上较新的元素。

但是,我强烈建议为登录和主页使用单独的PageFactory。

 类似资料:
  • 我已经在macOS 10.14上安装了Cassandra 3.11.3。openjdk版本“11”2018-09-25 openjdk运行时环境18.9(build 11 28)openjdk 64位服务器VM 18.9(build 11 28,混合模式) 当我试图启动卡桑德拉时,我 我猜,某处没有初始化,或者存在与Java相关的不兼容性。有人有什么想法吗?

  • 更新代码: 页面对象: 页面库: 测试基地: 看起来框架没有考虑等待预期条件-元素的可见性。我怀疑与“visibilityOf(element)”的实现和@FindBy初始化元素的方式有关 异常的堆栈跟踪: 原因:org。openqa。硒。NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id='container']]/

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer,例如: model.add(Dense(64, kernel_initializer='random_uniform', bias

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是init,例如: model.add(Dense(64, init='uniform')) 预定义初始化方法 uniform lecun_uniform: 即有输入节点数之平方根放缩后的均匀分布初始化(LeCun 98). normal identity:仅用于权值矩

  • 问题内容: 我很好奇,无论如何在init方法内部调用一个用于设置类实例属性的方法。本质上,我只是有一个类来对UIView进行子类化,并在init中添加了一些子视图,而其中一些子视图是该类的实例变量。 现在出现了问题,我无法在初始化类的内部属性之前调用super init(在super.init调用时未初始化属性’self.collectionView’),但是在调用之前,我也无法调用自定义方法来初

  • 问题内容: 据我所知,有四种方法可以在Swift中声明字典: 似乎这四个选项产生相同的结果。 这些有什么区别? 问题答案: 您要做的只是注意到您可以: 使用显式变量类型,或者让Swift根据分配给它的值来推断变量的类型。 使用正式的指定通用泛型符号,或使用内置的“语法糖”来描述字典类型。 二乘二就是四。 实际上,实际上您已经省略了一些可能性。例如,你 可以 说 当然,在现实生活中,您不愿做 任何