我如何从网页元素获得定位器值

How can I get the locator value from a webelement?

本文关键字:定位器 元素 网页      更新时间:2023-09-26

我想从javascript中的selenium元素中获得选择器的值。

如果我有对象:var el = browser.driver.findElement(by.id('testEl'));

我想获得文本'testEl'并在其他地方使用它。我不关心选择器类型是什么(通过id,通过css等),只关心文本是什么。

在protractor中,我可以这样做: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来存储字符串,并在任何时候声明一个元素或尝试使用类似上面的东西时传递它,但这只是意味着使用设置页面对象的新标准。如果像上面的protractor那样访问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);