Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查我的for each循环中是否存在元素_C#_Selenium_Selenium Webdriver - Fatal编程技术网

C# 如何检查我的for each循环中是否存在元素

C# 如何检查我的for each循环中是否存在元素,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我需要检查一个元素是否基本存在,如果存在,我想打开一个url,然后返回到原始页面,然后继续原样编写。我尝试了一些方法,但他们不断抛出异常。我在有问题的行中添加了注释。我就是想不出如何实现它 foreach (string line in File.ReadLines(@"C:\\tumblrextract\\in7.txt")) { if (line.Contains("@"))

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

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

但首先:

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

var searchEmail=driver.FindElement(By.Name(“follow_this”)

var submitButton=driver.FindElement(By.Name(“submit”)

在下一次执行中可能会过时。(ElementStaleException)。 将它们也粘贴到以下位置:

driver.Url=“”

第二:

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

var result=driver.FindElement(By.ClassName(“邀请某人成功”)).Text

var isThere=driver.FindElements(By.ClassName(“邀请某人\失败”)

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

我特别邀请您了解selenium的工作原理


玩得开心。

你有什么例外?可能是空引用异常。请考虑在代码中添加NULL检查,用于以下

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

以上不是经过验证/精确的代码,只是一个伪代码

我没有例外,我只是想弄清楚如何实现我发布的代码中的两行注释。如果存在invite\u someone\u失败,请加载url,然后返回原始url并继续读/写。获取异常,我更新了帖子中的代码。没有这样的元素:无法找到元素:{“方法”:“类名”,“选择器”:“邀请某人\u成功”}我的if/else语句似乎根本不起作用。为什么不先将元素计数/文本保存在变量中,并验证它们是否获取所需的值,然后将其传递给if-else?如果类名似乎不起作用,那么为什么不尝试使用XPath搜索元素?如果您需要帮助,为什么不发布HTML源代码?