如何检查元素是否存在于我的for每个循环中



我需要检查一个元素是否基本存在,如果存在,我想打开一个url,然后返回到原始页面,然后继续原样写作。我尝试了几种方法,但他们总是给出抛出的例外。我在有问题的行中添加了注释。我只是不知道如何实现它。

foreach (string line in File.ReadLines(@"C:\tumblrextract\in7.txt"))
{
if (line.Contains("@"))
{
searchEmail.SendKeys(line);
submitButton.Click();
var result = driver.FindElement(By.ClassName("invite_someone_success")).Text;
if (driver.FindElements(By.ClassName("invite_someone_failure")).Count != 0)
// If invite_someone_failure exists open this url
driver.Url = "https://www.tumblr.com/lookup";
else
// Then back to following page and continue searchEmail.SendKeys(line); submitButton.Click(); write loop
driver.Url = "https://www.tumblr.com/following";
using (StreamWriter writer = File.AppendText("C:\tumblrextract\out7.txt"))
{
writer.WriteLine(result + ":" + line);
}
}
}

您得到的异常是什么?可能是Null引用异常。请考虑在以下的代码中添加Null检查

if(By.ClassName("invite_someone_success") != null){
var result = driver.FindElement(By.ClassName("invite_someone_success")).Text;
}

上面没有经过验证/准确的代码,只是一个伪代码

您使用的是selenium,您可能会在现有代码的某些行中抛出异常-同时考虑到我不知道tumblr网站,它是html结构。

但首先:

你处于foreach循环中,每次你加载一个页面至少一次,你所有的元素都会失效,所以这行:

var searchEmail=驱动程序。FindElement(按.Name("follow_this"));

var submitButton=驱动程序。FindElement(按.Name("提交"));

在下一次执行中可能会失效。(ElementStaleException)。将它们也粘贴在:之后

驱动程序.Url="https://www.tumblr.com/following";

第二:

使用FindElement方法时,必须确保元素存在,否则还会引发ElementNotFoundException。

var result=驱动程序。FindElement(按.ClassName("invite_someone_success").Text;

var isThere=驱动程序。FindElements(按.ClassName("invite_someone_failure"));

dotNet selenium客户端有一个静态(我相信)类来帮助实现它是ExpectedCondition在尝试读取元素的文本之前,您可以使用它来检查元素是否存在。。

我邀请您了解硒是如何工作的,特别是StaleElementReferenceException。

玩得开心。

最新更新