Javascript 如何从webelement获取定位器值?
我想从javascript中的selenium webelement获取所用选择器的值 如果我有目标:Javascript 如何从webelement获取定位器值?,javascript,selenium,protractor,Javascript,Selenium,Protractor,我想从javascript中的selenium webelement获取所用选择器的值 如果我有目标: var el=browser.driver.findElement(by.id('testEl') 我想得到文本“testEl”并在其他地方使用它。我不关心选择器类型是什么(按id、按css等),只关心文本是什么 在量角器中,我可以这样做: console.log(el.locator().value) 这将返回文本“testEl” 但对于selenium非量角器选择器,我被告知.value(
var el=browser.driver.findElement(by.id('testEl')代码>
我想得到文本“testEl”并在其他地方使用它。我不关心选择器类型是什么(按id、按css等),只关心文本是什么
在量角器中,我可以这样做:
console.log(el.locator().value)代码>
这将返回文本“testEl”
但对于selenium非量角器选择器,我被告知.value()不是函数
有没有办法拉出此定位器/选择器值
编辑:
目标:从selenium Web元素中获取定位器文本
用法:用于getVisibleElement等函数
情况:在一个页面上,某个选择器的元素数量未知,有些隐藏,有些不隐藏(但在它们上面有一个区域隐藏,在元素的这个特定部分上没有隐藏的标记),我只想得到可见的元素
在量角器中:
function getVisibleElementByPageObject(protractorWebElement){
var allElementsOfSelector = element.all(by.css(protractorWebElement.locator().value));
var displayedElement = allElementsOfSelector .filter(function(elem) {
return elem.isDisplayed('cannot find' + ' ' + protractorWebElement.locator().value);
}).first();
return displayedElement ;
}
var exampleEl = $('[name="test"]');
var visibleExampleEl = getVisibleElementByPageObject(exampleEl);
我希望获得定位器,这样如果我更改选择器是什么,我只需要在一个地方更改它——声明元素的页面对象
我可以使用var来存储字符串,并在任何时候声明元素或尝试使用类似上面的东西时传递该字符串,但这只意味着使用设置页面对象的新标准。像上面的量角器一样,在selenium中访问定位器将非常方便。您不需要从webElement获取定位器,您应该在第一次使用它查找元素时就已经拥有了它。如果您的页面对象尚未按这种方式设置,则说明您做得不对
在webdriver.js中,它们显示了以下示例:
* var link = element.findElement(firstVisibleLink);
*
* function firstVisibleLink(element) {
* var links = element.findElements(By.tagName('a'));
* return webdriver.promise.filter(links, function(link) {
* return links.isDisplayed();
* }).then(function(visibleLinks) {
* return visibleLinks[0];
* });
* }
因此,您应该能够:
var firstElement = function(locator) {
return browser.driver.findElement(locator);
};
var firstVisible = function(locator) {
var elements = browser.driver.findElements(locator);
return browser.driver.promise.filter(elements, function(el) {
return el.isDisplayed();
}).then(function(visibleElements) {
return visibleElements[0];
});
};
var testLocator = by.css('[name="test"]');
var E1 = firstElement(testLocator);
var E1v = firstVisible(testLocator);
注意,对于非角度站点,您仍然可以使用量角器
——它只是selenium javascript绑定的包装器!我实际上是在量角器中运行这一切。对于站点的非角度部分,我必须使用selenium选择器,因为在量角器选择器上执行操作需要角度选择器。据我所知,selenium web元素没有locator().value选项。据我回忆,您不必使用driver.findElement()
,并且可以继续使用量角器的元素()
在非角度站点上。唯一重要的区别是同步被关闭。每当我尝试在此页面上使用量角器元素时,我都会在窗口中找不到有关角度的错误。
Selenium元素没有此问题,所以我一直在使用它们。有什么原因不能将定位器存储在变量中并以这种方式重用吗?