2016-12-15 52 views
1

如何在Locator Selenium WebDriver页面对象中转换IWebElement?如何通过C#将Selenium定位器中的Selenium 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); 
    } 

是可能的?谢谢!

+0

如果你想用这个模型来坚持,你可以创建一个单独的方法,它'IWebElement',通过它你的元素(例如'txtUser')然后用try catch处理该方法,直到元素被找到/准备好/可见。我看不到如何在你的场景中做“等待”而不复制By locator类型的字符串。国际海事组织,等待元素的理想解决方案是这样的:http://stackoverflow.com/a/7312740/2246511但我不知道你可以如何使用它与PageObjects。 – jibbs

回答

-1

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

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

,然后使用它像

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

您仍然可以通过他已经拥有的txtUser属性的FindsBy属性尝试避免重复,然后再次在您推荐的userLocator字段中进行重复。 – jibbs

+0

@jibbs是的,但他不需要'FindsBy',所以重复将被删除。 – JeffC

+1

@JeffC这个解决方案没有解决重复问题,但我解决了这样的问题:wait.Until(ExpectedConditions.ElementToBeClickable(+1 overload));谢谢 –

相关问题