我已经使用selenium 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++;
}如果这个元素不存在,代码就不会停止。有人能帮我吗?
发布于 2015-04-01 11:49:01
好吧,首先,根本不要使用任何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异常...这全看情况了。
发布于 2015-04-01 11:38:57
您应该检查元素是否存在,在这种情况下,检查并查看元素的大小是否大于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
}发布于 2015-04-01 16:22:57
我这样做了,它起作用了。
if (driver.FindElements(By.XPath("//*[@id='step_2']/div[3]")).Count != 0)https://stackoverflow.com/questions/29368786
复制相似问题