使用selenium WebDriver在网页中执行javascript

时间:2015-06-18 16:29:35

标签: java javascript html selenium webdriver

我正在尝试使用selenium WebDriver在网页上执行javascript方法。我能够在页面上执行自己的脚本,但不能从页面的HTML中调用该方法。这是HTML

    function Search(){
        if(check(document.forms[0],"searchResults")){
        var fieldCode = "";
        var fieldText = "";

        if((document.forms[0].elements['prrSearchVO.selectedSearchCriteria.prrNumber'].value =="") && (!isPRRNoSelected()))
        {
            alert('PRR No. must be a selected field.');
            unSelectAllOptions(document.forms[0].availableFieldsListArray);
            unSelectAllOptions(document.forms[0].selectedFieldsList);
        }
        else
        {
            document.forms[0].excelRequested.value = "false";
            document.forms[0].action = "prrSearchResults.do";
            document.forms[0].submit();
        }
    }
} 

如果我尝试手动提交表单,则无法正确加载。我可以使用下面的代码执行我自己的javascript。如何执行"搜索"来自页面的功能?

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("document.getElementById('fromIssueDate').removeAttribute('readOnly')");

1 个答案:

答案 0 :(得分:1)

首先,你不应该使用WebDriver执行javascript,除非真的没有其他选项。为什么不提交工作?你尝试了什么?根据我的经验,有时click不会触发表单提交,因此您在表单元素上使用submit。请注意,如果您在非表单元素上submit,则为no-op。所以下面的内容应该可行,

    WebElement email = driver.findElement(By.id("email"));
    WebElement password = driver.findElement(By.id("password"));
    WebElement submit = driver.findElement(By.id("submit"));
    email.sendKeys("John");
    email.password("foo");
    submit.submit();

回到原来的问题,Search()是一个全局函数吗?然后你可以做类似下面的事情,但就像我说的那样,WebDriver并不建议你调用javascript,因为那不是真实用户与你的应用程序交互的方式

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.Search();");