3

モーダル ダイアログの問題を解決するために、2 日間 Web を検索しました。そこには素晴らしい情報があり、IEを除いてすべて機能します。ファイルのアップロード ダイアログを開いて、新しいファイルを選択しようとしています。autoIT スクリプトを作成しましたが、FF と Chrome で問題なく動作します。IE で試してみると、「executeScript」がテスト スクリプトに戻りません。IE では、[ファイルのアップロード] ダイアログが開きます。しかし、それが私のスクリプトが停止する場所です。autoIT スクリプトを手動で実行すると、「ファイルのアップロード」ダイアログが閉じた後、テスト スクリプトに戻ります。

//WebDriver driver = new FirefoxDriver();
// processPage(driver);
WebDriver ieDriver =new InternetExplorerDriver();
processPage(ieDriver);
// WebDriver chromeDriver = new ChromeDriver();
// processPage(chromeDriver);

. . . その他のコード。.

WebElement element = driver.findElement(By.name(uploadDifferntFile));
if (driver instanceof InternetExplorerDriver) {
  ((InternetExplorerDriver) driver).executeScript("arguments[0].click();", element);

} else if(driver instanceof FirefoxDriver){
  ((FirefoxDriver) driver).executeScript("arguments[0].click();", element);

} else if(driver instanceof ChromeDriver){
  ((ChromeDriver) driver).executeScript("arguments[0].click();", element);

}

. . . オートIT。. .

try {
    Process proc = Runtime.getRuntime().exec(fileToExecute);
} catch (IOException e) {
    System.out.println("Failed to execute autoIT");
    e.printStackTrace();
}

いつも応援ありがとうございます

4

2 に答える 2

0

sendKeys は、Internet Explorer で作業する私にとって安定したソリューションではなかったため、同じ問題に足を踏み入れました。そこで、AutoIt でバリエーションを作成します。

Firefox では JavaScript を使用し、IE では入力フィールドをダブルクリックします。

// fileInput is the WebElement resulting from the input field with type file
if (browser == "FF") {
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", fileInput);
} else {
    Actions action = new Actions(driver);
    Action doubleClick = action.doubleClick(fileInput).build();
    doubleClick.perform();
}   
于 2014-05-26T09:26:24.477 に答える
0

これは、IE での引数 [0 ] .click 操作中に呼び出されるモーダル ダイアログに関連しているようです)」、同じ問題を説明していると思います。

試すいくつかのオプションは次のとおりです。

  1. JavaScript コードを「element.click()」または「element.sendKeys(Keys.ENTER)」に置き換えます。
  2. argument[0].clickを実行する前に新しいスレッドを開始し、そのスレッドで少し待ってからautoItコードを実行します

また、既存のコードを JavascriptExecutor に置き換えて、JavaSrcipt を 1 回だけ記述することもできます。

WebElement element = driver.findElement(By.name(uploadDifferntFile));
if (driver instanceof JavascriptExecutor) {
  ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
}
于 2013-03-28T21:42:04.027 に答える