У меня есть WebElement, я хочу, чтобы reset его значение атрибута какое-то другое значение (например, attr
- это атрибут, и я хочу изменить его оригинальный value=1
на новый value=10
).
Возможно ли это? Я использую Selenium 2.0 (WebDriver.)
У меня есть WebElement, я хочу, чтобы reset его значение атрибута какое-то другое значение (например, attr
- это атрибут, и я хочу изменить его оригинальный value=1
на новый value=10
).
Возможно ли это? Я использую Selenium 2.0 (WebDriver.)
Вам нужно будет использовать класс JavascriptExecutor:
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");
Если вы используете шаблон 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);
}
}
Метод расширения Fancy С#, основанный на предыдущих ответах:
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");
Другое, чтобы ответить на этот вопрос, на который здесь ответил @nilesh fooobar.com/questions/159269/...
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.
Я создал этот jquery, который решил мою проблему.
public void ChangeClassIntoSelected(String name,String div) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("Array.from($(\"div." + div +" ul[name=" + name + "]\")[0].children).forEach((element, index) => {\n" +
" $(element).addClass('ui-selected');\n" +
"});");
}
С помощью этого скрипта вы можете изменить фактическое имя класса на другое.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementsByClassName('featured-heading')[0].setAttribute('style', 'background-color: green')");
Я мог бы добавить атрибут, используя указанный выше код в java