Selenium Firefox驱动程序中WebElement的GetAttribute返回空
因此,我编写了一个测试,该测试使用Selenium Firefox驱动程序中WebElement的GetAttribute返回空,selenium,firefox,selenium-webdriver,selenium-firefoxdriver,getattribute,Selenium,Firefox,Selenium Webdriver,Selenium Firefoxdriver,Getattribute,因此,我编写了一个测试,该测试使用SeleniumChromeDriver运行并正常工作。我的任务是让FirefoxDriver的测试也能正常进行 测试的一部分是将文本输入到登录字段,然后检查登录字段以确保它是输入的。我们检查字段的方式是这样的 public virtual string Text => WebElement.GetAttribute("value"); while (!Text.Equals(inputText) && count++ < 3) 公
Selenium
ChromeDriver
运行并正常工作。我的任务是让FirefoxDriver的测试也能正常进行
测试的一部分是将文本输入到登录字段,然后检查登录字段以确保它是输入的。我们检查字段的方式是这样的
public virtual string Text => WebElement.GetAttribute("value");
while (!Text.Equals(inputText) && count++ < 3)
公共虚拟字符串文本=>WebElement.GetAttribute(“值”);
而(!Text.Equals(inputText)&&count++<3)
这在Chrome
中非常有效。但是,它不在Firefox中。当我调试测试时,它显示Text
是”
或空/空。如果我打开Firefox,我可以这样做document.getElementById(“login”).value
,它会返回正确的值
WebElement.GetAttribute在FirefoxDriver
中的实现是否不同?或者我只是缺少了什么?很难说为什么不在Firefox上工作,浏览器之间的实现没有什么不同。您可以使用IJavascriptExecutor
尝试替代解决方案,如下所示:-
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
string Text = (string)js.ExecuteScript("return arguments[0].value", WebElement);
很难说你为什么不在Firefox上工作,浏览器之间没有不同的实现。您可以使用IJavascriptExecutor
尝试替代解决方案,如下所示:-
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
string Text = (string)js.ExecuteScript("return arguments[0].value", WebElement);
获取属性/属性的Selenium协议是随着Selenium 3而发展的
对于Selenium 2,方法WebElement.GetAttribute(…)
在存在时返回HTMLElement
属性,否则返回属性
对于Selenium 3,有一个独特的命令用于获取属性,另一个命令用于获取属性:
在您的案例中,您似乎正在使用geckodriver(Selenium 3),而客户端仅限于Selenium 2规范。这将解释为什么不归还财产
要使其正常工作,您可以将C#客户端升级到V3.0.0-beta2:
或者,您可以在方法扩展中实现自己的GetProperty
:
静态字符串GetProperty(此IWebElement元素,字符串属性){
var driver=(RemoteWebDriver)((RemoteWebElement)元素).WrappedDriver;
var result=(IList)driver.ExecuteScript(@)
变量元素=参数[0],属性=参数[1];
if(元素中的属性)返回[true',+元素[property]];
返回[false,'缺少属性:'+property];
“、要素、财产);
bool success=(bool)结果[0];
如果(!success)抛出新的WebDriverException((字符串)结果[1]);
返回(字符串)结果[1];
}
用法:
string value=driver.FindElement(…).GetProperty(“value”);
获取属性/属性的Selenium协议随着Selenium 3的发展而发展
对于Selenium 2,方法WebElement.GetAttribute(…)
在存在时返回HTMLElement
属性,否则返回属性
对于Selenium 3,有一个独特的命令用于获取属性,另一个命令用于获取属性:
在您的案例中,您似乎正在使用geckodriver(Selenium 3),而客户端仅限于Selenium 2规范。这将解释为什么不归还财产
要使其正常工作,您可以将C#客户端升级到V3.0.0-beta2:
或者,您可以在方法扩展中实现自己的GetProperty
:
静态字符串GetProperty(此IWebElement元素,字符串属性){
var driver=(RemoteWebDriver)((RemoteWebElement)元素).WrappedDriver;
var result=(IList)driver.ExecuteScript(@)
变量元素=参数[0],属性=参数[1];
if(元素中的属性)返回[true',+元素[property]];
返回[false,'缺少属性:'+property];
“、要素、财产);
bool success=(bool)结果[0];
如果(!success)抛出新的WebDriverException((字符串)结果[1]);
返回(字符串)结果[1];
}
用法:
string value=driver.FindElement(…).GetProperty(“value”);
这是有道理的。我使用的是geckodriver和Selenium 3.0 beta2,但Visual Studio一直告诉我GetProperty由于某些原因无效,我不得不在Saurabh Gaur的帖子中使用Javascript。这是有道理的。我使用的是geckodriver和Selenium 3.0 beta2,但Visual Studio一直告诉我GetProperty由于某些原因无效,我不得不求助于使用Saurabh Gaur文章中的Javascript。