- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Wait.Until 方法来检查我的页面是否已经加载或是否仍在加载。这是它的样子:
protected IWebElement FindElement(By by, int timeoutInSeconds)
{
StackTrace stackTrace = new StackTrace();
string callingMethod = stackTrace.GetFrame(1).GetMethod().Name;
string message = "Error finding element in method: " + callingMethod;
if (timeoutInSeconds > 0)
{
try
{
WebDriverWait wait = new WebDriverWait(chromeDriver, TimeSpan.FromSeconds(timeoutInSeconds));
wait.Until(ExpectedConditions.ElementIsVisible(by));
Thread.Sleep(800);
}
catch (Exception)
{
Assert(false, message);
throw new Exception(message);
}
}
return chromeDriver.FindElement(by);
}
但是现在我们想改变我们的自动化页面并开始使用 FindBy 来对抗每个元素,就像这样:
[FindsBy(How = How.Id, Using = "username")]
public IWebElement _logInUserName;
但是 wait.until 需要“by”元素。
我看到了这个问题的抽象解决方案,但它对我的情况没有好处。谁能知道我可以使用的另一种解决方案?
最佳答案
有一个ByFactory
class in Selenium .NET solution .我用这个实现来实现你想要的:
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using System;
using System.Globalization;
using System.Linq;
using System.Reflection;
namespace SeleniumPlayground
{
public static class SeleniumHelper
{
public static FindsByAttribute GetFindsByAttributeFromField(Type pageObject, string iwebElementFieldName)
{
FieldInfo fi = pageObject.GetField(iwebElementFieldName);
FindsByAttribute attr = (FindsByAttribute)fi.GetCustomAttributes(typeof(FindsByAttribute), false).FirstOrDefault();
return attr;
}
public static By GeyByFromFindsBy(FindsByAttribute attribute)
{
var how = attribute.How;
var usingValue = attribute.Using;
switch (how)
{
case How.Id:
return By.Id(usingValue);
case How.Name:
return By.Name(usingValue);
case How.TagName:
return By.TagName(usingValue);
case How.ClassName:
return By.ClassName(usingValue);
case How.CssSelector:
return By.CssSelector(usingValue);
case How.LinkText:
return By.LinkText(usingValue);
case How.PartialLinkText:
return By.PartialLinkText(usingValue);
case How.XPath:
return By.XPath(usingValue);
case How.Custom:
if (attribute.CustomFinderType == null)
{
throw new ArgumentException("Cannot use How.Custom without supplying a custom finder type");
}
if (!attribute.CustomFinderType.IsSubclassOf(typeof(By)))
{
throw new ArgumentException("Custom finder type must be a descendent of the By class");
}
ConstructorInfo ctor = attribute.CustomFinderType.GetConstructor(new Type[] { typeof(string) });
if (ctor == null)
{
throw new ArgumentException("Custom finder type must expose a public constructor with a string argument");
}
By finder = ctor.Invoke(new object[] { usingValue }) as By;
return finder;
}
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Did not know how to construct How from how {0}, using {1}", how, usingValue));
}
}
这是一个示例用法:
public class Page
{
private IWebDriver driver;
[FindsBy(How = How.Id, Using = "content")]
public IWebElement ele;
public Page(IWebDriver _driver)
{
this.driver = _driver;
}
}
使用如下:
Page page = PageFactory.InitElements<Page>(driver);
FindsByAttribute findsBy = SeleniumHelper.GetFindsByAttributeFromField(typeof(Page), "ele");
By by = SeleniumHelper.GeyByFromFindsBy(findsBy);
关于c# - 如果我已经有了带有 FindsBy 的元素,如何将 Wait.Until 与 Selenium 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35969229/
我是测试初学者,有一个问题。如何正确使用 ReadOnlyCollection如果我使用属性 FindsBy .开始测试后,我的收藏始终为空。这是我在 C# 中的代码: [FindsB
Finder 属性参数是否有效,即它实际上可以使用吗?每当我尝试使用它时,我都会收到此编译器错误“'Finder' 不是有效的命名属性参数,因为它不是有效的属性参数类型”,例如 [FindsBy(Fi
我正在尝试通过数据绑定(bind)属性并使用 FindsBy 属性单击元素。我也尝试通过关注 this tutorial 来实现它, 但无法真正让它发挥作用。 可以使用 Findsby 吗?像这样 [
我有这个规范 Scenario Outline: Display widget Given I have a valid connection When I navigate to h
为了解释我的问题,我给出了一个小场景: 假设我有一个登录页面。 public class LoginPage { [FindsBy(How = How.Id, Using = "SomeRea
我正在使用 Wait.Until 方法来检查我的页面是否已经加载或是否仍在加载。这是它的样子: protected IWebElement FindElement(By by, int timeout
我正在尝试使用 OpenQA.Selenium.Support.PageObjects 中包含的 [FindsBy] 属性将多个 IWebElements 设置为一个集合,如下所示。假设我想将所有“l
我正在使用 PageFactory 在用于 C# 的 Selenium WebDriver 中构建页面对象模型。 不幸的是,我发现 FindsByAttribute不会初始化 SelectElemen
所以我开始使用这个很棒的功能: [FindsBy(How = How.CssSelector, Using = "div.location:nth-child(1) > div:nth-child(3
我是一名优秀的程序员,十分优秀!