c#selenium表单提交

时间:2018-01-27 22:05:52

标签: c# selenium

我遇到问题如果提交表单可用然后提交数据并检查响应,它似乎检查提交表单,提交数据然后不处理给出的响应,代码示例:

            if (driver.FindElements(By.Name("search")).Count > 0 && driver.FindElement(By.Name("search")).Displayed)
            {
                driver.FindElement(By.Name("search")).SendKeys(query + Keys.Enter);

                if (driver.FindElements(By.XPath("//*[@id='not found']/h2")).Count > 0 && driver.FindElement(By.XPath("//*[@id='not found']/h2")).Displayed)
                {
                    Console.WriteLine("search not found");
                    driver.Manage().Cookies.DeleteAllCookies();
                    driver.Navigate().GoToUrl("https://example.com");
                }

            }

这应该做的是:

如果

driver.findelement(by.name("search") 

是真的,那么

driver.findelement(by.name("search").sendkeys(query)

然后,检查提供的响应并使用if语句中的给定命令进行处理。

1 个答案:

答案 0 :(得分:0)

我会稍微改写一下,使它更具可读性,而不是多次点击页面。每次执行for idx, row in barcodes2.iterrows(): for col in ['dash_1','dash_2','dash_3']: if row[col].isnull(): row[col] == 'n' else: row[col] == 'y' 时,Selenium都会抓取页面。刮一次,使用第一次刮擦完成所有分析,然后继续。

driver.findElement()

由于如果一个元素存在且可见,你会多次检查,我会将该代码包装在一个函数中,使其更易于使用,并使代码更易于阅读。

IReadOnlyCollection<IWebElement> search = GetVisibleElements(By.Name("search"));
if (search.Any())
{
    search.ElementAt(0).SendKeys(query + Keys.Enter);

    if (GetVisibleElements(By.XPath("//*[@id='not found']/h2")).Any())
    {
        // search not found
        Console.WriteLine("search not found");
        Driver.Manage().Cookies.DeleteAllCookies();
        Driver.Navigate().GoToUrl("https://example.com");
    }
    else
    {
        // search found
        // do stuff here
    }
}

此函数根据提供的定位器定位元素,将其过滤为仅显示的元素,然后返回列表。然后,您可以查看脚本中返回列表中是否有任何元素。