如何获取此ID

时间:2017-07-27 13:59:46

标签: c# linq selenium selenium-webdriver selenium-chromedriver

我正在使用Selenium WebDriver进行自动化,我正在获取表格的所有元素。

我使用了以下代码:

var qntd= driver.FindElements(By.XPath("//*[@id='dataTable']/tbody/tr")).Skip(3);

然后我意识到每个元素都生成了一个不属于Id的Id,如Html

所示

enter image description here enter image description here

我尝试使用查询检索此ID,但我不能,因为返回的是HTML Id属性

var query = from a in qntd
                select a.GetAttribute("Id");

此ID来自何处以及如何检索它?

3 个答案:

答案 0 :(得分:1)

很遗憾,您无法访问此字段,因为方法" FindElements"以IWebElement的形式返回元素。 IWebElement没有实现方法来获取您正在寻找的ID值。

如果FindElements方法要返回类型RemoteWebElement,甚至ChromeWebElement,我们将能够访问此字段,因为RemoteWebElement有一个访问它的方法。但是,此方法未在接口中实现。所以我们没办法得到它。我已经玩过铸造,并且避风港能够在正确的位置施放。截至目前,我还没有找到获取此ID的方法。

有关详细信息,请参阅RemoteWebElement.cs源代码: https://github.com/SeleniumHQ/selenium/blob/master/dotnet/src/webdriver/Remote/RemoteWebElement.cs

希望这有点帮助你

答案 1 :(得分:0)

如果您希望将所有元素的ID作为List<String>来获取

List<String> query = qntd.Select(it => it.Id).ToList();

答案 2 :(得分:0)

这是驱动程序本身生成的特殊ID,而不是html属性。您可以将类型强制转换为RemoteWebElement,然后使用反射来获取此值,因为它受到保护。但这几乎不是您测试中需要的东西。

https://seleniumhq.github.io/selenium/docs/api/dotnet/?topic=html/P_OpenQA_Selenium_Remote_RemoteWebElement_Id.htm