Let's say I have the following import: import package1.Interface1;. Interface1 is a public interface, and I am using it in my code. Inside Interface1, there is another public class called Class1.
When I am using Class1 in my code, the Intellij auto-import imports the class as:
import package1.Interface1;
Interface1.Class1();
But I would like the auto-import to import Class1 automatically as:
import package1.Interface1.Class1;
Class1();
I have been looking through the IntelliJ settings and am not sure which one does that? Would it be some settings under: Editor -> Code Style -> Java -> Imports?
Found it. It is under Editer -> Code Style -> Java -> check Insert imports for inner classes.
Related
I have this in my script
import groovy.io.FileType
.....
derp = new File("blah")
The script works but inetillij complains it cant resolve "File" and it suggested I import a totally different wrong library for it (com.jidesoft.icons.IconSet)
I already tried invalidating cache and restarting
How do I get intelllij to import groovy.io.FileType? I cant even find a way to suppress error either it doesnt give me that option
groovy.io.FileType is an enum class. It appears your variable derp would be of type File, not FileType.
You can statically import enums from the FileType class (for example):
import static groovy.io.FileType.*
In my Intellij on Java 8 the File class comes from the java.io package in a .groovy file.
I am not allowed to use FileUtils in the program and error is shown when doing so. Even no suggestion is showing to import this pre-defined Class. I tried to search the solution but what I found was to import the class. But in my case even suggestion is not showing to import any class. Hovering on the "FileUtils" shows the suggestion to create FileUtils class/interface. Below is my code:
package captureScreenshot;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils; //Getting Error at this line
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import com.google.common.io.Files;
public class FacebookScreenshot {
#Test
public void captureScreenshot() throws IOException
{
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.facebook.com");
driver.findElement(By.xpath("//input[#name='firstname']")).sendKeys("Anil Kumar");
TakesScreenshot ts = (TakesScreenshot) driver;
File source = ts.getScreenshotAs(OutputType.FILE);
FileUtils.copyfile(source,new File("./Screenshots/facebook.png")); //Getting error at this line
driver.quit();
}
}
FileUtils Class
FileUtils Class is defined in org.apache.commons.io.FileUtils which provides the general file manipulation utilities in the following areas :
writing to a file
reading from a file
make a directory including parent directories
copying files and directories
deleting files and directories
converting to and from a URL
listing files and directories by filter and extension
comparing file content
file last changed date
calculating a checksum
org.apache.commons.io is bundled along with selenium-server-standalone-x.y.z by default and available ready to use.
But the behavior you are observing is pretty much inline with your usecase where you mentioned that you are not allowed to use FileUtils in the program. It can be either of the scenarios as mentioned below :
Incase you are using JARs from selenium-java-3.9.1 client, the JAR containing org.apache.commons.io is not being added to your project.
Incase you are using Maven with selenium-java-3.9.1 client dependency the modules containing FileUtils Class have been excluded.
For the following above mentioned reasons, when you mention FileUtils in your program it doesn't show any suggestion to import the class. Moreover if you forcefully provide the import, it will show error on that line.
The line FileUtils.copyFile(); has been updated to FileHandler.copy()
Yes with Selenium Latest version we should use FileHandler.copy()
It works and doesn't throw any error.
// Take Screenshots example
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileHandler.copy(scrFile, new File("<your path>\\screenshot.png"));
download maven commons-io jars from: https://mvnrepository.com/artifact/commons-io/commons-io
and add jars to your build Path in your project
In the above FileHandler.copy(scrFile, new File("\screenshot.png"));
here copy -the method copy(File, File) is undefined for the type FileHandler is occured
When selecting "Create test" on a Kotlin class, I would like to include additional imports by default. For example, at the moment, only import org.testng.annotations.Test is included but I would also like import org.testng.Assert.*.
How can I modify the test file template for Kotlin/TestNG in IntelliJ?
If you look closely, the generated Kotlin test class is actually first generated as a Java class and then quickly converted to Kotlin.
Thus, you can modify the TestNG Test Class template in Settings -> Editor -> File and Code templates -> Code.
I have created a listener class in my project. Now what I have read in web there are two methods to add a listener either to your class or to testng file.
Please check in the folder structure. For now, I m using it like this in my java class but it is giving me error as in image attached:
#Listeners({Test.tes.Utils.ListenerUse.class})
From your screenshots, I understand that your test class HomeTestCases.java resides in the package Test.test.MyHomepageTestCases in src/test/java
You are trying to refer to the listener ListenerToUse.java that resides in the package Test.tes.Utilsin src/main/java.
When you use #Listeners(Test.tes.MyHomepageTestCases.MyHomepageTestCases.ListenerToUse.class)
Here you are basically telling Java to look for the listener class ListenerToUse inside Test.tes.MyHomepageTestCases.MyHomepageTestCases (as a nested class), but that's not the case because ListenerToUse is NOT a embedded class inside MyHomepageTestCases.java.
To fix the problem please do the following:
Change: #Listeners(Test.tes.MyHomepageTestCases.MyHomepageTestCases.ListenerToUse.class)
To: #Listeners(Test.tes.Utils.ListenerToUse.class)
I think the issue is you're mixing the package of your Listener, and the package of the class where you want to add it.
Your code now:
#Listeners(Test.tes.MyHomePageTestCases.MyHomePageTestCases.ListenerUse.class)
Correct package:
#Listeners(Test.tes.Utils.ListenerUse.class)
However, you've named your package "Test", which is (besides breaking Java naming conventions -> https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html) clashing with the TestNG Test class. On your screenshot, I can see that "Test" is grayed out. If you hover with your mouse over it, you'll probably see Eclipse has resolved it as "org.testng.annotations.Test". So you have two options:
Name your packages properly and try again
Expand the imports sections of your HomeTestCases class; manually add:
import Test.tes.Utils.ListenerUse;
and delete the following:
import org.testng.annotations.Test;
I have an enum class with a ton of enums, which I like to address as
Enumclass.argument1
Enumclass.argument2
Enumclass.argument3
I had a ton of such references in a file, however IntelliJ decided to put import statements at the top:
import static com.abc.util.Enumclass.argument1;
import static com.abc.util.Enumclass.argument2;
import static com.abc.util.Enumclass.argument3;
and change the references to just
argument1
argument2
argument3
I want to disable this, and also revert what it did. I've been digging around but I just can't find where to do this! I'm on MAC OSX, IJ 12.1.4.
Found it. Hit Alt+Enter on the enum to bring up the options menu, and the first item should say Expand static import to Enumclass.argument1. Press Enter, then chose to do it for all occurrences of that argument1.