まあ、私が理解しているように、それは実際にはセレン固有の質問ではなく、基本的な Java の質問です。
あなたが提供した式の意味:
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
driver以下は次のとおりです。変数のタイプが何であれ、この行では、メソッドTakesScreenshotを持つインターフェースを実装していることを確認していますgetScreenshotAs。したがって、型をキャストして、オブジェクトのメソッドTakesScreenshotを呼び出します。このメソッドの実装は、どちらであっても実際のクラス内にあります。getScreenshotAsdriverdriver
質問コードに非常に近い例を挙げます (このメソッドを受け入れるObjectようにしたので、ターゲット インターフェイスにキャストoする必要があります。実際のコードでは実行しないでください)。
public void log(Object o) {
((Printable) o).print();
}
Printableメソッドとのインターフェースはどこにありますかprint:
public interface Printable {
void print();
}
Printableしたがって、 likeの実装がある場合
public class Greeting implements Printable {
@Override
public void print() {
System.out.println("Hello, username");
}
}
私たちは呼び出すことができます
log(new Greeting())
その結果、「こんにちは、ユーザー名」という行になります
編集:
JavaDoc to selenium でわかるように、WebDriverインターフェースはインターフェースを拡張しません TakesScreenshot。したがって、driver変数のタイプがWebDriverインターフェイスの場合は、キャストする必要があります。-コンパイラWebDriver driver = new ChromeDriver()の型の参照しかありません。WebDriver実際のクラスはChromeDriverコンパイラであるという事実にもかかわらず、それを知りません。したがって、この場合、getScreenshotAsメソッドを呼び出すには、キャストdriverする必要があります (そして、とインターフェイスの両方を実装するインスタンスであるためTakesScreenshot安全です)。その後、インターフェイスからメソッドを呼び出すことができます。driverChromeDriverWebDriverTakesScreenshotgetScreenshotAsTakesScreenshot
まあ、私が理解しているように、それは実際にはセレン固有の質問ではなく、基本的な Java の質問です。
あなたが提供した式の意味:
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
driver以下は次のとおりです。変数のタイプが何であれ、この行では、メソッドTakesScreenshotを持つインターフェースを実装していることを確認していますgetScreenshotAs。したがって、型をキャストして、オブジェクトのメソッドTakesScreenshotを呼び出します。このメソッドの実装は、どちらであっても実際のクラス内にあります。getScreenshotAsdriverdriver
質問コードに非常に近い例を挙げます (このメソッドを受け入れるObjectようにしたので、ターゲット インターフェイスにキャストoする必要があります。実際のコードでは実行しないでください)。
public void log(Object o) {
((Printable) o).print();
}
Printableメソッドとのインターフェースはどこにありますかprint:
public interface Printable {
void print();
}
Printableしたがって、 likeの実装がある場合
public class Greeting implements Printable {
@Override
public void print() {
System.out.println("Hello, username");
}
}
私たちは呼び出すことができます
log(new Greeting())
その結果、「こんにちは、ユーザー名」という行になります
編集:
JavaDoc to selenium でわかるように、WebDriverインターフェースはインターフェースを拡張しません TakesScreenshot。したがって、driver変数のタイプがWebDriverインターフェイスの場合は、キャストする必要があります。-コンパイラWebDriver driver = new ChromeDriver()の型の参照しかありません。WebDriver実際のクラスはChromeDriverコンパイラであるという事実にもかかわらず、それを知りません。したがって、この場合、getScreenshotAsメソッドを呼び出すには、キャストdriverする必要があります (そして、とインターフェイスの両方を実装するインスタンスであるためTakesScreenshot安全です)。その後、インターフェイスからメソッドを呼び出すことができます。driverChromeDriverWebDriverTakesScreenshotgetScreenshotAsTakesScreenshot
WebDriver driver = new ChromeDriver();
// driver.getScreenshotAs(OutputType.File); // compilation error as there is no method getScreenshotAs in WebDriver interface
((TakesScreenshot) driver).getScreenshotAs(OutputType.File); // ok after explicit casting