Selenium c#使用Pagefactory在页面上存在查找元素

时间:2017-11-29 00:05:50

标签: c# selenium selenium-webdriver webdriver page-factory

我正在将我的selenium脚本迁移到PageFactory,如果网页上存在元素,我目前仍然坚持查找

我目前的实施是

public bool IsElementExist(string element)
        {
            try
            {
                Driver.FindElement(By.XPath(element));
                return true;
            }
            catch (NoSuchElementException)
            {
                return false;
            }
        }

我的页面上有多个项目,如果我需要删除所有/部分项目。每次我删除页面刷新,但Pagefactory FindsBy没有刷新并保留第一个值。请帮忙。

3 个答案:

答案 0 :(得分:0)

如果有多个元素匹配给定的定位器,则findElement()方法只需选择第一个元素并返回相应的WebElement。这有时会让人感到困惑,因为你可能会无意中与另一个元素进行交互。

稍微好一点的函数实现如下(Java中的示例,但在C#中的工作方式类似):

    public Boolean objectExists(By by) {
        int numberOfMatches = driver.findElements(by).size();       
        if(numberOfMatches == 1) {
            return true;
        }
        else {
            // 0 matches OR more than 1 match
            return false;   
        }
    }

不确定这是否与您的问题直接相关,但值得一试。

答案 1 :(得分:0)

下面我正在执行等待,但它提供了一个示例,说明如何传递IWebElement以查找对象并执行操作。您提供的方法是期望您将XPath作为字符串而不是页面上已标识元素的名称提供。

var myCustomers = (from cc in context.ContractCustomers
    where cc.Contract_ID.Equals(contractID)
    select new
    {
        Licencee = cc.IsLicencee,
        Added = cc.AddedDate,
        Firstname = cc.Customer.FirstName,
        Lastname = cc.Customer.LastName,
        DOB = cc.Customer.DateOfBirth,
        Postcode = cc.Customer.PostCode,
        CustomerNumber = cc.CustomerNumber,
        CustomerLockerHasCard = cc.Customer.CustomerLockers
                        .Where(x => x.LockerNumber == 1000)
                        .Select(x => x.HasCard)
    }
)

它存在于我从MyPageFunctionality.cs调用的BaseUtil.cs中:

// Wait Until Object is Clickable
    public static void WaitUntilClickable(IWebElement elementLocator, int timeout)
    {
        try
        {
            WebDriverWait waitForElement = new WebDriverWait(DriverUtil.driver, TimeSpan.FromSeconds(10));
            waitForElement.Until(ExpectedConditions.ElementToBeClickable(elementLocator));
        }
        catch (NoSuchElementException)
        {
            Console.WriteLine("Element with locator: '" + elementLocator + "' was not found in current context page.");
            throw;
        }
    }

答案 2 :(得分:0)

这会有用吗?

{{1}}