【问题标题】:How to convert Selenium IWebElement in Selenium Locator By C#?如何通过 C# 在 Selenium Locator 中转换 Selenium IWebElement?
【发布时间】:2016-12-15 16:30:56
【问题描述】:

如何在 Locator Selenium WebDriver 页面对象中转换 IWebElement?

我是这样工作的:

using OpenQA.Selenium.Support.PageObjects;
        [FindsBy(How = How.Id, Using = "user")]
        public IWebElement txtUser { get; set; }

        public void fillUserField(string user)
        {
           wait.Until(ExpectedConditions.ElementIsVisible(By.Id("user")));
           txtUser.SendKeys(user);
        }

我不想在等待中重复 ID“用户”。

我不是这样工作的:

    public void fillUserField(string user)
    {   // TO DO - Convert IWebElement in Locator (BY)
        //Argument1: Cannot convert from 'OpenQA.Selenium.IWebElement' to 'OpenQA.Selenium.By'  
        wait.Until(ExpectedConditions.**ElementIsVisible(txtUser)**);
        txtUser.SendKeys(user);
    }

有可能吗?谢谢!

【问题讨论】:

  • 如果您要坚持使用此模型,您可以创建一个单独的方法,该方法采用 IWebElement,将您的元素传递给它(例如 txtUser),然后在该方法中使用 try catch 处理等到元素找到/准备好/可见。如果不复制 By 定位器类型字符串,我看不到如何在您的场景中使 wait 工作。 IMO,等待元素的理想解决方案是:stackoverflow.com/a/7312740/2246511 但我不知道您如何将其与 PageObjects 一起使用。

标签: c# selenium automated-tests pageobjects


【解决方案1】:

你会在类的顶部声明一个定位器。

public By userLocator = By.Id("user");

然后像这样使用它

wait.Until(ExpectedConditions.ElementIsVisible(userLocator));

【讨论】:

  • 你仍然会有 Ramon 试图避免的重复,他已经拥有 txtUser 属性的 FindsBy 属性,然后在你推荐的 userLocator 字段中再次出现。
  • @jibbs 是的,但那时他不需要FindsBy,因此会删除重复项。
  • @JeffC 这个解决方案没有解决重复问题,但我解决了这样的问题:wait.Until (ExpectedConditions.ElementToBeClickable (+1 重载));谢谢
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 2022-01-01
  • 2021-07-03
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多