首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium c#自动化测试

Selenium c#自动化测试
EN

Stack Overflow用户
提问于 2015-03-31 20:33:31
回答 5查看 589关注 0票数 0

我已经使用selenium c#进行了自动化测试,并且有一个问题。我的测试在表单中写入一些信息,然后提交,如果在提交包含一些信息的div有信息"Formoje yra klaidu“后,它必须从表单写入文件电子邮件,但问题是当电子邮件没有错误时,这个div是不可见的,并且我的测试仅停止在Iwebelement通过xpath找到元素的地方,因为元素不可见。下面是一些代码

代码语言:javascript
复制
 for (int i = 0; i < array.Length; i++)
        {

        IWebElement PasirinktiParkinga = driver.FindElement(By.CssSelector("#zone_16 > td:nth-child(5) > a:nth-child(1)"));
        PasirinktiParkinga.Click();

        IWebElement Vardas = driver.FindElement(By.Id("firstname1"));
        Vardas.Clear();
        Vardas.SendKeys("Vardas");

        IWebElement Pavarde = driver.FindElement(By.Id("lastname1"));
        Pavarde.Clear();
        Pavarde.SendKeys("Pavarde");

        IWebElement AutoNumeris = driver.FindElement(By.Id("vehicle_number1"));
        AutoNumeris.Clear();
        AutoNumeris.SendKeys("ASD123");

        IWebElement Pastas = driver.FindElement(By.Id("email1"));
        Pastas.Clear();
        Pastas.SendKeys(array[i]);

        IWebElement Taisykles = driver.FindElement(By.CssSelector("div.checks:nth-child(5) > div:nth-child(1) > label:nth-child(2)"));
        Taisykles.Click();

        IWebElement uzsakyti = driver.FindElement(By.CssSelector(".submit-zone > input:nth-child(1)"));
        uzsakyti.Click();

        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));


            IWebElement MessageRed = driver.FindElement(By.XPath("//*[@id='step_2']/div[3]")); //This line  is were i wan't to find this div but i must write it so that if there isn't there - just do the for cicle 
            if (MessageRed.Text.Contains("Formoje yra klaidų."))
            {
                failure += array[i] + "\n";

                System.IO.File.WriteAllText(@"C:\Users\jarek\Desktop\Failureemail\failure.txt", failure);
            }




        IWebElement unipark = driver.FindElement(By.CssSelector(".logo > a:nth-child(1)"));
        unipark.Click();

        i++;
        }

如果这个元素不存在,代码就不会停止。有人能帮我吗?

EN

回答 5

Stack Overflow用户

发布于 2015-04-01 11:49:01

好吧,首先,根本不要使用任何Thread.Sleeps。改用隐式和显式等待。其次,尽量不要使用xpath (很难维护,理解它)。如果你需要验证元素的存在,你可以用下一种方法来做,例如

代码语言:javascript
复制
    var elements = driver.FindElements(By.XPath("//*[@id='step_2']/div[3]"));
   if(elements.Count() > 0)
      //   do everything you want
   else
      //continue doing smth

或者您可以尝试捕获ElementNotFound异常...这全看情况了。

票数 2
EN

Stack Overflow用户

发布于 2015-04-01 11:38:57

您应该检查元素是否存在,在这种情况下,检查并查看元素的大小是否大于0。这就是我在Java中的实现方式:

代码语言:javascript
复制
if (driver.FindElement(By.XPath("//*[@id='step_2']/div[3]")).size() > 0)
{
   //perform your action now
}

else
{
  //perform action if the element is not present
}
票数 0
EN

Stack Overflow用户

发布于 2015-04-01 16:22:57

我这样做了,它起作用了。

代码语言:javascript
复制
   if (driver.FindElements(By.XPath("//*[@id='step_2']/div[3]")).Count != 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29368786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档