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

 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++;
        }

如果该元素不存在,如何使代码停止。 有谁能够帮助我 ???

#1楼 票数:2

好吧,首先不要使用任何Thread.Sleeps。 使用隐式和显式等待代替。 其次,尽量不要使用xpath(很难维护,理解它)。 而且,如果您需要验证元素是否存在,则可以通过以下方式进行操作,例如

    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楼 票数:0

您应该检查该元素是否存在,在这种情况下,请检查该元素的大小是否大于0。这是我在Java中的处理方式:

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
}

#3楼 票数:0

我是这样做的,而且有效

   if (driver.FindElements(By.XPath("//*[@id='step_2']/div[3]")).Count != 0)

#4楼 票数:0

请谨慎使用FindElements,如果您的页面很大,则执行测试的时间可能会很长。 当必须使用FindElements搜索元素时,可以使用FindElement来帮助我确定必须使用FindElements查找所研究元素的位置。 就我而言,每次直接使用FindElements时,我的执行时间都会减少2秒

#5楼 票数:0

使用隐式等待。 这样,您可以输入以秒为单位的值,如果最初没有找到该值,则webdriver将等待该元素。 此示例设置为2秒。

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(2)

您也可以使用try {} catch {}。

另外,如果您想清理代码,则可以编写用于查找元素的函数,然后将该ID名称传递给函数。 它将使事情变得更加清晰和易于阅读。

这是我通过ID查找元素的方法

static void ClickElement_ByID(string elementName)
    {
        try
        {
            IWebElement test = driver.FindElement(By.Id(""+elementName+""));
            Console.WriteLine("Found: "+elementName);
            test.Click();
        }
        catch (Exception e)

        {
            Console.WriteLine(e);
        }

  ask by Jara Skuder translate from so

未解决问题?本站智能推荐:

1回复

C#SeleniumWeb部件的自动化

我正在尝试对SharePoint 2013文档库的自动化进行手工编码,并且无法抓住椭圆控件来打开包含该文档预览的Web部件。 Selenium正在识别类名称,它对于文档库中的所有省略号都是相同的值,但是不是XPath或CSS值。 我已经使用Selenium IDE和FirePath来查找X
2回复

硒C#

大家好,我正在使用此功能从浏览器获取输入字段的名称。 问题是在我的几个站点中,输入字段的位置相同,因此我无法正确循环输入。 是否有任何想法如何以不同的方式来循环这种变化,如穿刺位置? 谢谢。
1回复

C#硒Xpath

我正在尝试从DOM中选择一个元素,但是我很努力。 基本上,我试图选择包含一些文本的标题属性。 以下是我要整合的DOM的一部分: 因此,我试图选择带有包含文本“ AndyShort”的“ title”属性的“ img”元素。 我已经尝试过了,但是没有用: 也, 有人可以帮忙吗?
2回复

如何使用硒C#计算嵌套的div?

我的页面中有两个bodycell div,我想计算第二个中的嵌套div。 必需的输出 :-我希望count = 2 尝试的方法 :-
3回复

C#硒如何单击复选框

我想通过C#和Selenium单击一个复选框。 复选框HTML如下: 我的代码如下:
2回复

硒错误的XPath与李C#

大家好。 我刚刚开始学习硒,并遇到了寻找元素的问题。 我想获取计时器的值,但未成功。 我敢打赌,我的问题是我在XPath上犯了错误 您是否知道如何正确使用它? 我将从<div class="event--timer">45:00</div>获取值<div
2回复

使用XPath的C#硒查找元素

我试图找到一个元素,它是一个div内的一个div ...这是代码示例: 我想找到class="label label-success multiplier"并检查她的style="display:none" 。 如何用C#编写? 请帮我谢谢!
1回复

c#基于跨度文本的硒选择输入

我正在尝试根据地址名称选择一个单选按钮。 在下面,我需要选择具有名称的范围或单选按钮本身。 无论哪种方式,它都会选择单选按钮。 我需要基于span类中的名称来执行此操作。 在此人的名字之前有一个随机的空格,所以我一直试图用一个包含John Doe来代替StartsWith。 无论我尝