Selenium WebDriver - 无法找到元素异常
问题描述:
我想在使用webdriver时从网站获取一些分数。到目前为止,我尝试了XPath,CSS,Classname,但有时它位于该项目中,有时却不是。Selenium WebDriver - 无法找到元素异常
这是我一直在试图把它的HTML代码:
<td class="score" rowspan="6"><span class="p1_home">0</span> - <span class="p1_away">0</span></td>
这是我的代码(我试过至今):
firstHalf[i] = Driver.FindElement(By.XPath("//*[@id=\"parts\"]/tbody/tr[2]/td[2]")).Text;
其他版本:
firstHalf[i] = Driver.FindElement(By.CssSelector("#parts > tbody > tr:nth-child(2) > td.score")).Text;
firstHalf[i] = Driver.FindElement(By.ClassName("score")).Text;
而且我尝试了儿童班(在分数班),但结果是一样的,有时可以找到元素,有时它不能。
有什么建议吗?
更新:对于我的代码,我把一些wait
或Thread.Sleep
仍然无法正常工作。
for (int r = 0; r < 10; r++)
{
try
{
string d1 = Driver.FindElement(By.XPath("//span[@class='p1_home']")).Text;
string d2 = Driver.FindElement(By.XPath("//span[@class='p1_away']")).Text;
//firstHalf[i] = firstHalf[i].Replace(" ", "");
firstHalf[i] = d1 + "-" + d2;
break;
}
catch (Exception e)
{
Thread.Sleep(300);
r -= 1;
eventCounter++;
if (eventCounter == 10)
{
errorMsg.sendErrMsg(e);
//errorMsg.stopProgram();
}
}
}
答
好吧,我发现了一个解决方案具有不同做法。我使用父类score
来取代两个特定的类。另外,我删除了“for loop”和“try”和“catch”,我用它来一次又一次地找到对象。
为了我的主循环,我加“尝试”和“捕获”。当我得到例外时,我减少了循环计数器,关闭了窗口并再次打开。此外,我添加了一些Thread.Sleep
为了不会得到错误,因为网络驱动程序行为如此之快,这导致了一个问题。
更新我的代码的版本:
for (int i = 0;; i < stopLimit.Count; i++)
{
try
{
Thread.Sleep(500);
string score = Driver.FindElementByCssSelector("#parts > tbody >
tr:nth-child(2) > td.score").Text;
firstHalf[i] = score.Replace(" ", "");
}
catch(Exception)
{
i--;
Thread.Sleep(1500);
Driver.SwitchTo().Window(Driver.WindowHandles.Last());
Driver.Close();
Driver.SwitchTo().Window(Driver.WindowHandles.First());
}
}
答
您可以使用
//span[@class='p1_home']
//span[@class='p1_away']
答
要找到特定类的元素和属性,你可以使用CSS选择器。例如:
Driver.FindElement(By.CssSelector(".score[rowspan='6']")).Text;
在你有困难找到元素可靠,你可能想要得到它后,满足一定的条件,像这样的情况:
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector(".score[rowspan='6']")));
ü要哪个元素定位 – iamsankalp89
@ iamsankalp89我想找到类'score'或子类,这些都是'p1_home'和'p1_away' –
//跨度[@ class ='p1_home']和// span [@ class ='p1_away'] – iamsankalp89