54

Javaを使ったWebDriver(Selenium 2)でJavaScriptを使いたいです。

私はいくつかのガイドと入門ページに従いました:最初の行に次のように実行する指示があります:

$ ./go webdriverjs

私の質問: 上記のコマンドはどのフォルダー/場所から実行/実行されますか?

4

8 に答える 8

5

JavaScript と Selenium WebDriver

Selenium は、最も人気のある自動テスト スイートの 1 つです。Selenium は、Web ベースのアプリケーションや幅広いブラウザやプラットフォームの機能面の自動テストをサポートおよび促進するように設計されています。

    public static WebDriver driver;
    public static void main(String[] args) {
        driver = new FirefoxDriver(); // This opens a window    
        String url = "----";


        /*driver.findElement(By.id("username")).sendKeys("yashwanth.m");
        driver.findElement(By.name("j_password")).sendKeys("yashwanth@123");*/

        JavascriptExecutor jse = (JavascriptExecutor) driver;       
        if (jse instanceof WebDriver) {
            //Launching the browser application
            jse.executeScript("window.location = \'"+url+"\'");
jse.executeScript("document.getElementById('username').value = \"yash\";");
// Tag having name then
driver.findElement(By.xpath(".//input[@name='j_password']")).sendKeys("admin");


//Opend Site and click on some links. then you can apply go(-1)--> back  forword(-1)--> front.
//Refresheing the web-site. driver.navigate().refresh();            
jse.executeScript("window.history.go(0)");
            jse.executeScript("window.history.go(-2)");
            jse.executeScript("window.history.forward(-2)");

            String title = (String)jse.executeScript("return document.title");
            System.out.println(" Title Of site : "+title);

            String domain = (String)jse.executeScript("return document.domain");
            System.out.println("Web Site Domain-Name : "+domain);

            // To get all NodeList[1052] document.querySelectorAll('*');  or document.all
            jse.executeAsyncScript("document.getElementsByTagName('*')");

            String error=(String) jse.executeScript("return window.jsErrors");
            System.out.println("Windowerrors  :   "+error);



            System.out.println("To Find the input tag position from top"); 
            ArrayList<?> al =  (ArrayList<?>) jse.executeScript(
                    "var source = [];"+
                    "var inputs = document.getElementsByTagName('input');"+
                    "for(var i = 0; i < inputs.length; i++) { " +
                       "   source[i] = inputs[i].offsetParent.offsetTop" +      //"    inputs[i].type = 'radio';"
                    "}"+
                    "return source"                 
                    );//inputs[i].offsetParent.offsetTop     inputs[i].type

            System.out.println("next");
            System.out.println("array : "+al);

            // (CTRL + a) to access keyboard keys. org.openqa.selenium.Keys 
            Keys k = null;
            String selectAll = Keys.chord(Keys.CONTROL, "a");
            WebElement body = driver.findElement(By.tagName("body"));
            body.sendKeys(selectAll);

            // Search for text in Site. Gets all ViewSource content and checks their.
            if (driver.getPageSource().contains("login")) {
                System.out.println("Text present in Web Site");
            }

        Long clent_height = (Long) jse.executeScript("return document.body.clientHeight");
        System.out.println("Client Body Height : "+clent_height);

        // using selenium we con only execute script but not JS-functions.

    }
    driver.quit(); // to close browser
}

ユーザー関数を実行するには、JS をファイルに書き込み、文字列として読み込んで実行するだけで簡単に使用できます。

Scanner sc = new Scanner(new FileInputStream(new File("JsFile.txt")));
        String js_TxtFile = ""; 
            while (sc.hasNext()) {          
                String[] s = sc.next().split("\r\n");   
                for (int i = 0; i < s.length; i++) {
                    js_TxtFile += s[i];
                    js_TxtFile += " ";
                }           
            }
        String title =  (String) jse.executeScript(js_TxtFile);
        System.out.println("Title  : "+title);

document.title & document.getElementById() は、ブラウザで使用できるプロパティ/メソッドです。

JsFile.txt

var title = getTitle();
return title;

function getTitle() {
    return document.title;
}
于 2015-07-08T13:04:24.937 に答える
1

メソッド呼び出しにパラメーターを追加する方法がわかりませんでした。見つけるのに時間がかかったので、ここに追加します。パラメータを (javascript 関数に) 渡す方法は、「arguments[0]」をパラメータの場所として使用し、そのパラメータを executeScript 関数の入力パラメータとして設定します。

    driver.executeScript("function(arguments[0]);","parameter to send in");
于 2018-09-05T14:19:40.320 に答える
0

次のコードは私のために働いた:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.springframework.beans.factory.annotation.Autowired;

public class SomeClass {

    @Autowired
    private WebDriver driver;

     public void LogInSuperAdmin() {
        ((JavascriptExecutor) driver).executeScript("console.log('Test test');");
     }
}
于 2020-03-10T11:58:16.433 に答える
0

JavaScript executor を使用して任意の要素のテキストを読みたい場合は、次のようなコードを実行できます。

WebElement ele = driver.findElement(By.xpath("//div[@class='infaCompositeViewTitle']"));
String assets = (String) js.executeScript("return arguments[0].getElementsByTagName('span')[1].textContent;", ele);

この例では、次の HTML フラグメントがあり、「156」と表示されています。

<div class="infaCompositeViewTitle">
   <span>All Assets</span>
   <span>156</span>
</div>
于 2016-06-03T18:31:57.043 に答える
-3

このコマンドは、Selenium SVN リポジトリ チェックアウトの最上位ディレクトリで実行する必要があります。

于 2012-07-12T14:12:47.523 に答える