まあ、私が理解しているように、それは実際にはセレン固有の質問ではなく、基本的な Java の質問です。
あなたが提供した式の意味:
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
driver
以下は次のとおりです。変数のタイプが何であれ、この行では、メソッドTakesScreenshot
を持つインターフェースを実装していることを確認していますgetScreenshotAs
。したがって、型をキャストして、オブジェクトのメソッドTakesScreenshot
を呼び出します。このメソッドの実装は、どちらであっても実際のクラス内にあります。getScreenshotAs
driver
driver
質問コードに非常に近い例を挙げます (このメソッドを受け入れる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
安全です)。その後、インターフェイスからメソッドを呼び出すことができます。driver
ChromeDriver
WebDriver
TakesScreenshot
getScreenshotAs
TakesScreenshot
まあ、私が理解しているように、それは実際にはセレン固有の質問ではなく、基本的な Java の質問です。
あなたが提供した式の意味:
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
driver
以下は次のとおりです。変数のタイプが何であれ、この行では、メソッドTakesScreenshot
を持つインターフェースを実装していることを確認していますgetScreenshotAs
。したがって、型をキャストして、オブジェクトのメソッドTakesScreenshot
を呼び出します。このメソッドの実装は、どちらであっても実際のクラス内にあります。getScreenshotAs
driver
driver
質問コードに非常に近い例を挙げます (このメソッドを受け入れる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
安全です)。その後、インターフェイスからメソッドを呼び出すことができます。driver
ChromeDriver
WebDriver
TakesScreenshot
getScreenshotAs
TakesScreenshot
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