我想从javascript中获取selenium webelement使用的选择器的值。
如果我有这个对象:
var el = browser.driver.findElement(by.id('testEl'));
我想获得该文本'testEl'并在其他地方使用它。我不关心选择器类型是什么(通过id,通过css等),只是文本是什么。
在量角器中,我可以这样做:
console.log(el.locator().value);
这将返回文本'testEl'。
但是只有selenium非量角器选择器,我被告知.value()不是函数。
有没有办法拉出这个定位器/选择器值?
修改
目标:从selenium webElement
中抓取定位器文本用途:用于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来存储字符串,并在我声明元素或尝试使用上述内容的任何时候传递它,但这只是意味着使用设置页面对象的新标准。在硒中访问定位器非常方便,就像上面的量角器一样。
答案 0 :(得分:0)
您不需要从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);