Selenium: Могу ли я установить какое-либо значение атрибута WebElement в Selenium? - PullRequest
42 голосов
/ 12 декабря 2011

У меня есть WebElement, я хочу сбросить его значение атрибута на другое значение (например, attr является атрибутом, и я хочу изменить его исходное значение value=1 на новое value=10).

Возможно ли это? Я использую Selenium 2.0 (WebDriver.)

Ответы [ 5 ]

43 голосов
/ 12 декабря 2011

Вы должны использовать класс JavascriptExecutor:

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");
15 голосов
/ 28 августа 2014

Если вы используете шаблон PageFactory или уже имеете ссылку на ваш WebElement , то вы, вероятно, хотите установить атрибут, используя существующую ссылку на WebElement . (Вместо того, чтобы делать document.getElementById(...) в вашем javascript)

Следующий пример позволяет вам установить атрибут, используя существующую ссылку на WebElement.

Фрагмент кода

import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.FindBy;

public class QuickTest {

    RemoteWebDriver driver;

    @FindBy(id = "foo")
    private WebElement username;

    public void exampleUsage(RemoteWebDriver driver) {
        setAttribute(username, "attr", "10");
        setAttribute(username, "value", "bar");
    }

    public void setAttribute(WebElement element, String attName, String attValue) {
        driver.executeScript("arguments[0].setAttribute(arguments[1], arguments[2]);", 
                element, attName, attValue);
    }
}
10 голосов
/ 14 сентября 2016

Необычный метод расширения C # на основе предыдущих ответов:

public static IWebElement SetAttribute(this IWebElement element, string name, string value)
{
    var driver = ((IWrapsDriver)element).WrappedDriver;
    var jsExecutor = (IJavaScriptExecutor)driver;
    jsExecutor.ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2]);", element, name, value);

    return element;
}

Использование:

driver.FindElement(By.Id("some_option")).SetAttribute("selected", "selected");
2 голосов
/ 19 сентября 2015

Еще один, чтобы ответить на этот вопрос, доступный здесь, ответил @ nilesh https://stackoverflow.com/a/19934852/2079692

    public void setAttributeValue(WebElement elem, String value){
    js = (JavascriptExecutor) webDriver; 

    String scriptSetAttrValue = "arguments[0].setAttribute(arguments[1],arguments[2])";

    js.executeScript(scriptSetAttrValue, elem, "value", value);

}

для этого используется функция selenium findElementBy, в которой также может использоваться xpath.

0 голосов
/ 26 декабря 2016
    JavascriptExecutor js = (JavascriptExecutor) driver;        
    js.executeScript("document.getElementsByClassName('featured-heading')[0].setAttribute('style', 'background-color: green')");

Я мог бы добавить атрибут, используя приведенный выше код в Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...