Selenium:我可以在Selenium中设置WebElement的任何属性值吗?

时间:2011-12-12 10:40:46

标签: testing selenium

我有一个WebElement,我想将其属性的值重置为其他值(例如attr是属性,我想将其原始value=1更改为新value=10 })。

有可能吗?我正在使用Selenium 2.0(WebDriver。)

6 个答案:

答案 0 :(得分:41)

您必须使用JavascriptExecutor类:

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");

答案 1 :(得分:15)

如果您使用PageFactory模式或已经引用了WebElement,那么您可能希望使用现有的WebElement引用来设置属性。 (而不是在你的javascript中执行document.getElementById(...)

以下示例允许您使用现有的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);
    }
}

答案 2 :(得分:10)

基于先前答案的Fancy 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");

答案 3 :(得分:0)

我创建了这个可以解决问题的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" +
                "});");
    }

使用此脚本,您可以将实际的类名更改为其他名称。

答案 4 :(得分:0)

我针对相同的问题发布了类似的解决方案,

访问How to use javascript to set attribute of selected web element using selenium Webdriver using java?

在这里,我们首先找到了使用xpath的元素,然后遍历了元素列表,然后将驱动程序对象强制转换为Executor对象,并在此处创建脚本,第一个参数是元素和第二个参数是属性,第三个参数是新值

List<WebElement> unselectableDiv = driver
                .findElements(By.xpath("//div[@class='x-grid3-cell-inner x-grid3-col-6']"));

        for (WebElement element : unselectableDiv) {

            // System.out.println( "**** Checking the size of div "+unselectableDiv.size());

            JavascriptExecutor js = (JavascriptExecutor) driver;

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

            js.executeScript(scriptSetAttr, element, "unselectable", "off");

            System.out.println(" *****   check value of Div property " + element.getAttribute("unselectable"));

        }

答案 5 :(得分:-1)

    JavascriptExecutor js = (JavascriptExecutor) driver;        
    js.executeScript("document.getElementsByClassName('featured-heading')[0].setAttribute('style', 'background-color: green')");

我可以在java

中使用上面的代码添加一个属性