0

我已将 Selenium WebDriver 添加到 Powershell 并创建 WebDriver 实例:

Add-Type -path C:\Windows\net40\WebDriver.dll
$driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver
$driver.Url = "https://www.google.com"

现在我想找到输入字段:

$singleRecord = ($driver.FindElementByCssSelector("input.gbqfif"))

我找到了几个如何在 C# 中“测试元素是否存在”的示例:

Selenium WebDriver - 测试元素是否存在

Selenium c# Webdriver:等到元素存在

这里也有指南:

IWebDriver driver = new FirefoxDriver();
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id("someDynamicElement"));
    });

但我无法在 Powershell 中创建类似的东西,而且几乎所有测试都失败了,因为页面加载元素需要时间。

4

2 回答 2

1

我不熟悉这个 API,但如果你在让它在 PowerShell 中工作但它在 C# 中工作时遇到问题,那么只需围绕你可以从 PowerShell 访问的功能创建 C# 包装器。您可以使用该Add-Type命令相当容易地做到这一点。从其文档页面中的第一个示例:

$source = @"
public class BasicTest { 
    public static int Add(int a, int b) {
        return (a + b);
    }  
    public int Multiply(int a, int b) {
        return (a * b);
    }
}
"@
Add-Type -TypeDefinition $source

[BasicTest]::Add(4, 3)
$basicTestObject = New-Object BasicTest
$basicTestObject.Multiply(5, 2)

当您发现此 API 的 C# 代码确实有效时,您可以将其放入可以从 PowerShell 调用的 C# 包装器类中。关键是要避免 PowerShell 无法处理的功能,例如 C# 静态扩展方法。

于 2013-11-02T18:58:11.637 回答
0

唯一真正安全的方法是:

    static bool isElementPresent(dynamic element, By by)
    {
        try
        {
            element.FindElement(by);
            return true;
        }
        catch (NoSuchElementException e)
        {
            return false;
        }
    }

此方法接受IWebDriverIWebElement作为FindElement()的起点。

因此,您可以在LINQ查询中使用它:

_infodeskSectionContracts = from contract in _infodeskSection.FindElements(By.CssSelector(_base + " * ul.list.type-itemlist li")) select new Contract { element = contract.FindElement(By.TagName("a")), label = contract.FindElement(By.TagName("h4")).Text, contractNumber = (isElementPresent(contract, By.TagName("p")) ? contract.FindElement(By.TagName("p")).Text : "0000") };

于 2018-03-14T11:12:19.797 回答