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

时间:2016-06-03 23:02:27

标签: c# selenium selenium-webdriver

我需要检查一个元素是否基本存在,如果确实存在,我想打开一个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);
                        }
                    }
                }

2 个答案:

答案 0 :(得分:0)

你正在使用selenium,你可能会在你所拥有的一些代码行中抛出异常 - 同时考虑到我不知道tumblr网站及其html结构。

但首先:

您处于foreach循环中,每次至少加载一次页面时,所有元素都会过时,所以这一行:

  

var searchEmail = driver.FindElement(By.Name(" follow_this"));

     

var submitButton = driver.FindElement(By.Name(" submit"));

可能在下一次执行中陈旧。 (ElementStaleException)。 之后粘贴它们:

  

driver.Url =" https://www.tumblr.com/following";

第二

使用FindElement方法时,您必须确保元素存在或者还会抛出ElementNotFoundException。

  

var result = driver.FindElement(By.ClassName(" invite_someone_success"))。文字;

     

var isThere = driver.FindElements(By.ClassName(" invite_someone_failure"));

dotNet selenium客户端有一个静态的(我相信)类可以帮助它实现预期的条件 您可以使用它来检查元素是否存在,然后再尝试阅读它的文本..

我邀请您了解硒的工作原理,特别是StaleElementReferenceException

玩得开心。

答案 1 :(得分:0)

你得到的例外是什么?可能它可能是Null引用异常。请考虑在以下

的代码中添加Null检查
if(By.ClassName("invite_someone_success") != null){
var result = driver.FindElement(By.ClassName("invite_someone_success")).Text;
}

以上未经验证/确切代码,只是伪代码