[英]Selenium C# - Unable to find element
首先,我在Selenium IDE firefox插件中创建了一个代码,该代码正在从网站上抓取数据。 当然,它在IDE中可以正常工作。
我想从中抓取网址:
<div class="gs-per-result-labels" url="http://example.com/foo/bar"></div>
如HTML所示:
<tr>
<td>open</td>
<td>http://example.com</td>
<td></td>
</tr>
<tr>
<td>storeAttribute</td>
<td>//div[@class='gs-per-result-labels']@url</td>
<td>myValue</td>
</tr>
<tr>
<td>echo</td>
<td>${myValue}</td>
<td></td>
</tr>
两条命令都正确执行, echo
给出正确的值。 接下来,我将格式更改为C# / NUnit / WebDriver
并将代码复制到Visual Studio2015。添加了FirefoxDriver
和IWebDriver
引用。 那是代码:
private static IWebDriver driver;
static void Main(string[] args)
{
driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://example.com");
Thread.Sleep(10000);
string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");
}
我还添加了“ Sleep
,以确保在抓取值时页面已完全加载。 问题是我在FindElement
函数上遇到错误,因为driver
无法找到元素。 我想知道为什么会这样。 一切似乎都一样。 你有什么建议吗?
我认为值得一提:我要抓取的内容是由php或javascript生成的(那是Google在“示例”页面上的搜索结果,而不是Google)
最好的方法是检查Xpath是否绝对正确。 您始终可以使用Firebug,或者如果您想以编程方式使用Firebug,则以下几行应该会有所帮助
List<WebElement> existList=driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']"));
if(existList.size()>0){
//SOPL("element present");
}
我建议您使用显式等待
WebDriverWait wait=new WebDriverWait (driver,60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.XPath("//div[@class='gs-per-result-labels']")));
string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.