在 Selenium 中,您可以通过 IWebElement 实例访问浏览器的底层 DOM。像这样:
IWebElement domWrapper = driver.FindElement(By.Name("q"));
假设您有如上例所示的“domWrapper”实例,但是您没有等式的右侧;这意味着您 a) 不知道元素实际代表什么,并且 b) 您不知道它是如何定位的。鉴于这两个前提条件,是否可以使用 selenium 为元素分配 id?我见过的所有为元素分配 id 的示例都利用 javascript 和定位器在 dom 中查找实例。
我最初是如何表达这个问题的(没有人理解:-))
关于如何将 id 分配给 Selenium 中的任意元素的任何想法?我通过 IWebElement 接口引用了 DOM 中的元素,并且我知道驱动程序支持 Javascript 的执行,但我只是不知道如何在没有 id 的情况下唯一地引用元素。
Psedu 代码示例(此代码通过使用它唯一设置的属性来定位 dom 元素以操纵 id,在我的情况下,我没有这样的唯一属性可以依赖)。
public string Id
{
get { return GetAttribute("id"); }
set
{
var finder = string.Format("document.querySelector('[{0}=\"{1}\"]')", "data-bind", element.GetAttribute("data-bind"));
string setId = "('id', '_id__'+(Math.floor(Math.random()*10000000)+1));";
string js = finder + ".setAttribute" + setId + ";";
Driver.ExecuteJavascript(js);
}
}